gpt4 book ai didi

dependency-injection - 依赖注入(inject) : injecting partially-initialized objects

转载 作者:行者123 更新时间:2023-12-04 08:23:39 26 4
gpt4 key购买 nike

这个问题是关于 Unity Container 的,但我想它适用于任何依赖容器。

我有两个具有循环依赖关系的类:

class FirstClass
{
[Dependency]
public SecondClass Second { get; set; }
}

class SecondClass
{
public readonly FirstClass First;

public SecondClass(FirstClass first)
{
First = first;
}
}

从技术上讲,如果将它们视为单例,则可以为它们实例化并正确注入(inject)依赖项:
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 试图保护我免于使用部分初始化的对象,但我希望将此保护作为一种选择,而不是一种义务。

问题:当前行为是否可禁用?

最佳答案

我认为你根本不能使用统一的循环依赖。

看:
http://msdn.microsoft.com/en-us/library/cc440934.aspx

关于dependency-injection - 依赖注入(inject) : injecting partially-initialized objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1377608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com