(für Ihren Lieblings IoC-Framework in Ihrem Kopf Diese Frage beruht nicht auf einer bestimmten IoC-Framework, so dass die Schnittstellen und Typen in meinen Mustern sind Meta-Typen. Gerade sie mit den entsprechenden Typen ersetzen.)Abhängigkeitsinjektion: Wie wird der Injektionsbehälter herumgeführt?
In meinem Hauptmethoden, ich aufgebaut typischerweise mein Behälter so etwas wie dies zu tun:
static void Main()
{
IInjector in = new Injector();
in.Register<ISomeType>().For<SomeType>();
in.Register<IOtherType().For<OtherType>();
...
// Run actual application
App app = in.Resolve<App>();
app.Run();
}
Meine Frage ist, wie Sie den Injector um geschickt bekommen? Normalerweise habe ich den Injektor nur mit sich selbst registriert und ihn in Typen injiziert, die selbst injizieren werden, aber ich bin mir nicht sicher, ob dies das richtige "Muster" ist.
Okay, wie wäre es damit. Die App ist ein WinForm und hat eine Schaltfläche, die ein Formular erstellt und anzeigt. Jedes Mal, wenn diese Schaltfläche gedrückt wird, sollte eine neue Instanz dieses Formulars erstellt und angezeigt werden. Da dieses Formular Abhängigkeiten aufweist, muss es für jede Instanziierung vom Anwendungsformular aufgelöst werden. Was jetzt? – Alex
@Alex: In diesem Fall können Sie "Providers" (spezialisierte Fabriken) verwenden, die ich in meinem anderen Beitrag erwähnt habe. Der Unterschied zwischen dem Injizieren eines Providers und dem Injizieren des gesamten Injektors besteht darin, dass dies die indirekten "geheimen" Abhängigkeiten stark einschränkt. IOW, es degradiert den Injektor nicht zu einem Service Locator. –
@chris_l: Also dann "Providers" kann den Injector herum halten, oder? Sonst haben wir das Problem einfach anderswo verschoben. – Alex