Ich habe die Artikel auf MSDN über Unity (Dependency Injection, Inversion of Control) gelesen, aber ich denke, ich muss sie in einfachen Worten (oder einfachen Beispielen) erklären. Ich bin mit dem MVPC-Muster vertraut (wir verwenden es hier), aber ich kann dieses Unity-Ding noch nicht wirklich verstehen, und ich denke, es ist der nächste Schritt in unserem Anwendungsdesign.
c#
dependency-injection
inversion-of-control
unity-container
Ryan Abbott
quelle
quelle
Antworten:
Unity ist nur ein IoC "Container". Google StructureMap und probieren Sie es stattdessen aus. Ein bisschen einfacher zu grillen, denke ich, wenn das IoC-Zeug für dich neu ist.
Wenn Sie IoC verstehen, verstehen Sie im Grunde, dass Sie das Steuerelement umkehren, wenn ein Objekt erstellt wird.
Ohne IoC:
Mit IoC-Container:
Ohne IoC muss Ihre Klasse, die sich auf den IMyService stützt, eine konkrete Version des zu verwendenden Dienstes neu erstellen. Und das ist aus mehreren Gründen schlecht (Sie haben Ihre Klasse an eine bestimmte konkrete Version des IMyService gekoppelt, Sie können sie nicht einfach testen, Sie können sie nicht einfach ändern usw.)
Mit einem IoC-Container "konfigurieren" Sie den Container, um diese Abhängigkeiten für Sie aufzulösen. Bei einem konstruktorbasierten Injektionsschema übergeben Sie einfach die Schnittstelle an die IMyService-Abhängigkeit an den Konstruktor. Wenn Sie die MyClass mit Ihrem Container erstellen, löst Ihr Container die IMyService-Abhängigkeit für Sie auf.
Mit StructureMap sieht die Konfiguration des Containers folgendermaßen aus:
Sie haben dem Container also mitgeteilt: "Wenn jemand den IMyService anfordert, geben Sie ihm eine Kopie des SomeConcreteService." Und Sie haben auch angegeben, dass jemand, der nach einer MyClass fragt, eine konkrete MyClass erhält.
Das ist alles, was ein IoC-Container wirklich tut. Sie können mehr, aber das ist der Kern davon - sie lösen Abhängigkeiten für Sie auf, sodass Sie dies nicht tun müssen (und Sie müssen das Schlüsselwort "new" nicht in Ihrem gesamten Code verwenden).
Letzter Schritt: Wenn Sie Ihre MyClass erstellen, gehen Sie folgendermaßen vor:
Hoffentlich hilft das. Fühlen Sie sich frei, mir eine E-Mail zu senden.
quelle
Ich habe gerade den 30-minütigen IoC-Screencast von David Hayden zur Unity Dependency Injection gesehen und fand, dass dies eine gute Erklärung mit Beispielen war. Hier ist ein Ausschnitt aus den Shownotizen:
Der Screencast zeigt verschiedene gängige Verwendungen des Unity IoC, wie zum Beispiel:
quelle
Unity ist eine Bibliothek wie viele andere, mit der Sie eine Instanz eines angeforderten Typs abrufen können, ohne sie selbst erstellen zu müssen. So gegeben.
Sie würden eine Bibliothek wie Unity verwenden, um den Taschenrechner zu registrieren, der zurückgegeben werden soll, wenn der Typ ICalculator (IoC (Inversion of Control)) angefordert wird (dieses Beispiel ist theoretisch, technisch nicht korrekt).
Wenn Sie also eine Instanz eines ICalculators möchten, müssen Sie nur ...
IoC-Bibliotheken können normalerweise so konfiguriert werden, dass sie bei jedem Auflösen eines Typs entweder einen Singleton enthalten oder eine neue Instanz erstellen.
Nehmen wir jetzt an, Sie haben eine Klasse, die sich darauf verlässt, dass ein ICalculator vorhanden ist, den Sie haben könnten.
Sie können die Bibliothek so einrichten, dass beim Erstellen ein Objekt in den Konstruktor eingefügt wird.
DI oder Abhängigkeitsinjektion bedeutet also, jedes Objekt zu injizieren, das ein anderes möglicherweise benötigt.
quelle
Dieser WilcoxTutorials-Typ demonstriert hervorragend den Unity-Container, der sich an Anfänger richtet.
Teil 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Teil 2: http://www.youtube.com/watch?v=PsIbevgzQQE
In weniger als einer halben Stunde werden Sie die Grundlagen verstehen!
quelle
Einheit ist ein IoC. Der Zweck von IoC besteht darin, die Verdrahtung von Abhängigkeiten zwischen Typen außerhalb der Typen selbst zu abstrahieren. Dies hat einige Vorteile. Zuallererst erfolgt dies zentral, was bedeutet, dass Sie nicht viel Code ändern müssen, wenn sich Abhängigkeiten ändern (was bei Komponententests der Fall sein kann).
Wenn die Verkabelung mithilfe von Konfigurationsdaten anstelle von Code erfolgt, können Sie die Abhängigkeiten nach der Bereitstellung tatsächlich neu verkabeln und so das Verhalten der Anwendung ändern, ohne den Code zu ändern.
quelle
MSDN verfügt über ein Entwicklerhandbuch zur Abhängigkeitsinjektion mit Unity , das möglicherweise hilfreich ist.
Das Entwicklerhandbuch beginnt mit den Grundlagen der Abhängigkeitsinjektion und enthält Beispiele für die Verwendung von Unity für die Abhängigkeitsinjektion. Ab Februar 2014 behandelt das Entwicklerhandbuch Unity 3.0, das im April 2013 veröffentlicht wurde.
quelle
Ich beschreibe die meisten Beispiele für Abhängigkeitsinjektion in ASP.NET Web API 2
In DIAutoV2Controller.cs wird der automatische Injektionsmechanismus verwendet
In DIV2Controller.cs wird alles aus der Dependency Configuration Resolver-Klasse eingefügt
Konfigurieren des Abhängigkeitsauflösers
quelle