关于循环引用的 autofac wiki 页面说要使用:
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 处理循环依赖的正确方法是什么?