Ich habe eine Klasse, die Abhängigkeiten hat, die ich mit Ninject verdrahtet habe.Ninject-Kernel-Erstellung in einer Klassenbibliothek
In der realen Implementierung verwende ich Property-Injektion, aber nur um schnell zu veranschaulichen, werde ich auf dem Feld injizieren. Wie ich verstehe, statt newing Instanzen von MyObject, um die Abhängigkeiten zu erhalten, um richtig injiziert werden, muss ich jedoch
kernel.Get<MyObject>()
Das, was ich bin Stolpern auf verwenden, ist, dass MyObject wird nur in die verwendet werden, Kontext einer Klassenbibliothek. Die Absicht ist, dass Endanwendungen ihre eigenen Module erstellen und sie in eine Kernel-Instanz zum Hydratisieren übergeben. Ist das der pragmatischste Weg, um eine generische Instanz eines Ninject-Kernels auf meine Klassenbibliothek zu bringen, damit Instanzen von MyObject (und anderen ähnlichen Fällen) hydratisiert werden können?
Meine erste Neigung ist eine Art Fabrik, die einen Singleton-Kernel internalisiert - was die Anwendungen selbst hydratisieren/initialisieren müssen, indem sie ein Modul laden.
So in RandomService.cs
var myKernel = NinjaFactory.Unleash();
var myobj = myKernel.Get<MyObject>();
myobj.foo();
Bevor ich aber zu weit auf diesem Weg gehen, ich brauche eine Plausibilitätsprüfung zu tun, um sicherzustellen, dass das Denken Sound ist oder dass es nicht einige offensichtlich andere was ich vermisse. Ich bin offensichtlich neu in IoC und fühle mich wie ich die Grundlagen, aber nicht unbedingt die besten realen Möglichkeiten, es zu verwenden.
Glücklicherweise ist dies eine interne (in einem Unternehmens Sinne) Lib, so habe ich ein in sich geschlossenes Publikum - andere Entwickler in meinem Team, mit einem Standard-Tool. Nun kann jeder Entwickler unterschiedliche Bindungen haben, die er will, daher meine ursprüngliche Quandry. Re: ctor vs Prop-Injektion, Requisite scheint sicherlich eine Menge Gruft haben Ich muss schreiben, aber ich sorge mich um die Abhängigkeitsliste wächst im Laufe der Zeit und damit die CTor Anrufe. Gibt es andere Nachteile für die Injektion, auf die ich achten sollte? – bakasan
Auch mit einer internen App würde ich immer noch die gleichen Prinzipien befolgen, da sie zu sauberer Code mit besserer Trennung von Bedenken führen. Es gibt viele potenzielle Probleme mit Property Injection, einschließlich der Schutz Invarianten (ist die Abhängigkeit Null?), Möglicherweise Hot-Swapping der injizierten Abhängigkeit (wahrscheinlich nicht etwas, was Sie tun möchten) und eine vage API im Allgemeinen. –
Oh, und nur um vorne und explizit darüber zu sein: Ich halte Service Locator ein Anti-Muster: http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx –