循環参照に関するautofacwikiページは、以下を使用すると述べています。
cb.Register<DependsByProp>().OnActivated(ActivatedHandler.InjectUnsetProperties);
しかし、ActivatedHandlerは2.4.5ではもう存在しないようです。ソースを調べてみると、そのクラスの実装が見つかったので、代わりにOnActivatedにメソッドの実装を入れました。残念ながら、これはまだ機能しません。
ここに、Wikiページにあるような最小限の再現をまとめました。
class M
{
public VM VM { get; set; }
public M()
{
}
}
class VM
{
public VM(M m)
{
}
}
[Fact]
void CanResolveCircular()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<VM>();
builder.RegisterType<M>().OnActivated(e => e.Context.InjectUnsetProperties(e.Instance));
using (var container = builder.Build())
{
var m = container.Resolve<M>();
Assert.NotNull(m);
}
}
Resolveが試行されると、このコードはスタックオーバーフロー例外をスローします。私は何が欠けていますか?Autofacに循環依存を処理させる正しい方法は何ですか?