Wir haben eine Lösung mit mehreren Projekten, die die Schichten unserer Anwendung darstellen. z.B.Ist es möglich, Castle Windsor Eigentumsabhängigkeiten zu lösen, wenn Sie keinen Bezug auf den Container haben?
Domain
Daten
Logic
WebUI
Unser Schloss Windsor Behälter wird von unserer Web-Schicht bezeichnet und wir diese Abhängigkeiten dann nach oben durch unsere Schichten kaskadieren. Zum Beispiel ...
// In Domain
public interface IFooRepository
{
void DoSomething();
}
// In Data
public class FooRepository : IFooRepository
{
public void DoSomething()
{
// Something is done
}
}
// In Logic
public class MyThingManager
{
private readonly IFooRepository fooRepository;
public MyThingManager(IFooRepository fooRepository)
{
this.fooRepository = fooRepository;
}
public void AMethod()
{
this.fooRepository.DoSomething();
}
}
// In Web
// in some controller....
var newManager = new MyThingManager(WindsorContainer.Resolve<IFooRepository>());
newManager.DoSomething();
und das funktioniert gut, bis unsere Manager viele Mitglieder haben, die ihre eigenen Abhängigkeiten haben. Wenn dies geschieht, lösen wir die Dependenzen des Managers und deren Dependenzen und kaskadieren sie von der Webschicht. Das Ergebnis sind einige ziemlich große Konstruktoren.
Gibt es einen eleganteren Weg, zum Beispiel, dass die inneren Komponenten eines Managers seine eigenen Abhängigkeiten auflösen, ohne Zugriff auf den Container zu haben?
Bedenken Sie, dass NUR die Web-Schicht Zugriff auf den Container hat (um eine zirkuläre Projektabhängigkeit zu verhindern), so kann nur die Web-Layer WindsorContainer.Resolve() die logische Ebene nicht so die einzige Möglichkeit zu kaskadieren Eine Abhängigkeit ohne die Container-Unterstützung bestand darin, sie in der Web-Ebene aufzulösen und dann die Kette über ihre Schnittstelle weiterzuleiten.
"Wir enden damit, sowohl die Managerabhängigkeiten als auch ihre Abhängigkeitsdepandanzen aufzulösen und sie von der Webschicht zu kaskadieren." Ich verstehe das nicht. Wenn Sie die Konstruktorinjektion verwenden und der Container die Abhängigkeiten automatisch in den Konstruktor eines Typs eingibt, sollte dies keinerlei Probleme verursachen. Ein bisschen mehr Code, der dieses Problem visualisiert, könnte hilfreich sein. – Steven