Diese Frage ist über Unity Container, aber ich denke, es ist für jede Abhängigkeit Container anwendbar.
Ich habe zwei Klassen mit zirkulären Abhängigkeiten:
class FirstClass
{
[Dependency]
public SecondClass Second { get; set; }
}
class SecondClass
{
public readonly FirstClass First;
public SecondClass(FirstClass first)
{
First = first;
}
}
Technisch ist es möglich, Abhängigkeiten für beide zu instanziieren und korrekt zu injizieren, wenn man sie als Singletons behandelt:
var firstObj = new FirstClass();
var secondObj = new SecondClass(firstObj);
firstObj.Second = secondObj;
Wenn ich versuche, dasselbe mit Unity zu tun, erhalte ich 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!
Ich verstehe, dass Unity versucht, mich vor der Verwendung von teilweise initialisierten Objekten zu schützen, aber ich möchte diesen Schutz als Option haben, nicht als Verpflichtung.
Frage: Ist das derzeitige Verhalten untauglich?