この質問はUnityコンテナに関するものですが、どの依存関係コンテナにも適用できると思います。
循環依存の2つのクラスがあります。
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が部分的に初期化されたオブジェクトの使用から私を保護しようとしていることは理解していますが、この保護を義務ではなくオプションとして使用したいと考えています。
質問:現在の行動は不可能ですか?