这个问题是关于 Unity Container 的,但我想它适用于任何依赖容器。
我有两个具有循环依赖关系的类:
class FirstClass
{
[Dependency]
public SecondClass Second { get; set; }
}
class SecondClass
{
public readonly FirstClass First;
public SecondClass(FirstClass first)
{
First = first;
}
}
从技术上讲,如果将它们视为单例,则可以为它们实例化并正确注入依赖项:
var firstObj = new FirstClass();
var secondObj = new SecondClass(firstObj);
firstObj.Second = secondObj;
当我尝试对 Unity 执行相同操作时,我得到 StackOverflowException:
var container = new UnityContainer();
container.RegisterType<FirstClass>(new ContainerControlledLifetimeManager());
container.RegisterType<SecondClass>(new ContainerControlledLifetimeManager());
var first = container.Resolve<FirstClass>(); // StackOverflowException here!
var second = container.Resolve<SecondClass>(); // StackOverflowException here too!
我了解 Unity 试图保护我免于使用部分初始化的对象,但我希望将此保护作为一种选择,而不是一种义务。
问题:当前行为是否可禁用?