2010-07-12 5 views
17

Ich habe das Gefühl, dass es nicht so etwas wie Inversion der Kontrolle gibt, oder eher der richtige Ausdruck ist die Abhängigkeitsinjektion. Kann ich das falsch annehmen?Inversion der Kontrolle <Dependency Injection

Ich habe versucht, IoC um meiner selbst Willen zu definieren. Dabei habe ich viel über IoC-Container und Dependency-Injection gelernt.

jetzt einfach, ich lese diese aus Martin Fowler's website:

Als Folge ich denke, dass wir für dieses Muster einen bestimmten Namen benötigen. Inversion der Kontrolle ist zu allgemein Begriff, und Menschen finden es verwirrend. Als Ergebnis mit einer Menge von Diskussion mit verschiedenen IoC Advokaten haben wir uns auf den Namen Dependency Injection.

In der Welt der modernen IoC ist nicht Abhängigkeit Injektion nur eine Möglichkeit, IoC zu erreichen?

+0

Für das Verständnis des Konzepts und der Bedeutung von Dependency Injection siehe http://ganeshtiwaridotcomdotnp.blogspot.com/2011/05/understanding-dependency-injection-and.html Und für ein vollständiges Beispiel der Bean-Verdrahtung mit Spring Framework http: //ganeshtiwaridotcomdotnp.blogspot.com/2011/05/dependency-injection-with-java-spring.html Es ist auf einfache Weise beschrieben ... – gtiwari333

Antwort

36

Wenn Sie Fowler's definition akzeptieren, Inversion of Control ist ein viel breiterer Begriff als DI, die deckt all Rahmen Verwendung, wo Sie in einen Rahmen stecken, aber der Rahmen ist immer noch die Kontrolle.

Zum Beispiel in .NET-Frameworks wie ASP.NET oder Windows Presentation Foundation ist letztlich in der Steuerung, sondern bietet verschiedene Ereignisse und Seams Sie eine Anwendung erstellen können. Das Gleiche gilt auch für andere Plattformen.

Dependency Injection ist eine Spezialisierung von IoC die IoC gilt speziell Abhängigkeiten zu verwalten.

+0

Danke, das klärt die Dinge. Kennst du einen Ort, an dem ich mehr Beispiele für IoC finden könnte? –

+0

In Wirklichkeit ist IoC (im Gegensatz zu DI) überall in OO.Es ist schwieriger, Beispiele für das Gegenteil zu finden. Ich bin nur sehr gut mit der .NET-Plattform vertraut, aber fast jede Art von Sub-Framework, die Sie dort verwenden (ASP.NET, Windows Forms, WCF usw.) sind IoC-Frameworks. Nur Konsolen-Apps fallen wirklich außerhalb dieser Kategorie. –

+0

Das ist eine Zusicherung gegeben Fowlers Aussage: "Inversion der Kontrolle ist zu allgemein Begriff". Genauer gesagt würde ich gerne DP- und IoC-Beispiele sehen. Ich bin wirklich darauf aus, mehr darüber zu lernen, wie man guten IoC durch DP erreicht. –

4

Ja, IoC bedeutet, dass die Klasse selbst die Dinge nicht kontrolliert, sondern von außen aufgerufen wird. Abhängigkeitsinjektion ist der Weg, dies zu tun.

Die Dependenz-Injektion ist in der Tat ein viel konkreterer Begriff, wohldefinierter als eine Inversion der Kontrolle.

6

Das ist einer der wenigen Punkte, die ich und Mark nicht zustimmen. Durch mein Buch, Inversion of Control Prinzip ist same as here so werde ich es nicht wieder aufrüsten.

Dependency-Injektion ist nur ein Akt der Externalisierung Erstellung von von Abhängigkeiten zur Außenwelt von Komponenten.

Verwalten dieser Abhängigkeiten (und viele andere Sachen) ist, was Inversion von Control Containern tun, und DI als Teil davon verwenden, ist nur ein Implementierungsdetail.