的autofac wiki頁面約Circular References說,使用:如何使用Autofac 2.4.5處理循環引用?
cb.Register<DependsByProp>().OnActivated(ActivatedHandler.InjectUnsetProperties);
但它看起來像ActivatedHandler不會在2.4.5存在了。在源代碼中挖掘,我發現該類的實現,所以我將方法實現放在OnActivated中。不幸的是,這仍然行不通。
我已經放在一起這裏看起來像維基頁面上的最小repro。
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);
}
}
該代碼在嘗試解析時仍然會引發堆棧溢出異常。我錯過了什麼?讓Autofac處理循環依賴的正確方法是什麼?
是。我認爲循環依賴意味着與實例循環相同。下面的答案指出了我錯過了類和實例之間的循環依賴關係的概念。 – Ants 2011-05-31 17:18:37