The Blog

DI vs. IoC

Als Antwort auf  Inversion of Control vs. Dependency Injection von Thomas Mentzel (lesenswerter Blog!).

IoC  verhält sich zu DI so:

  • IoC: Ist das Konzept.
  • DI: Ist ein Weg IoC zu erreichen.

Wege um IoC umzusetzen:

  • Fabrikmuster
  • ServiceLocator
  • Konstruktor Injektion (das ist DI!)
  • Setter/Feld Injektion (Das ist DI!)
  • Plugins
  • mehr Ideen?

Wege um DI umzusetzen:

  • Konstruktor Injektion
  • Setter/Feld Injektion

Alle IoC Container (Castle, Unity, NInject, Autofac, usw.) sind also DI Frameworks.

Fowler beschreibt in seinem Artikel die Beziehung zwischen  „Service Locator und Dependency Injection“ genauer.


Kick It auf dotnet-kicks.de

Tags: ,

5 Awesome Comments So Far

Don't be a stranger, join the discussion by leaving your own comment
  1. Rainer Hilmer
    November 7, 2010 at 16:46 #

    Je mehr ich über dieses Thema lese, um so mehr verwirrt es mich eigentlich – erst recht wenn man die Diskussionen auf Wikipedia verfolgt. Dort wird zum Beispiel behauptet dass DI und IOC zwei ganz unterschiedliche Dinge sind (der Meinung bin ich übrigens auch). Vor allem diesen Kommentar finde ich sehr interessant -> http://en.wikipedia.org/wiki/Talk:Dependency_injection#Delete_this_article

  2. Robert
    November 7, 2010 at 18:51 #

    Hallo Rainer,

    oh ja, ein erstaunlich schweres Thema! Irgendwie hat es ewig gedauert, DI/IoC auch nur halbwegs zu begreifen. Der Sprung zum Einsatz von IoC Frameworks war zumindest für mich, sehr, sehr schwer. Jetzt habe ich aber das Gefühl, dass es sich auf vielen Ebenen auszahlt und Entwicklung nachhaltig verbessert.

    Die Diskusion auf Wikipedia bezog sich glaube ich auf die schwachen Samples von 2007. Die Samples wurden gut angepasst und sind jetzt recht deutlich. Ich habe den Link auf den Absatz im Martin Fowler Artikel korrigiert: http://martinfowler.com/articles/injection.html#ServiceLocatorVsDependencyInjection – ich finde dort ist es ganz gut auf den Punkt gebracht: Im Prinzip reichen die ersten 2 Zeilen vom Abschnitt.

    Ich würde die Beiden Wikipedia Artikel auch nicht zusammenführen und finde den IoC Artikel eigentlich sehr gut – schön kurz und knackig und den DI Artikel auch ganz OK.

    Vielleicht findest Du mal Zeit zu schreiben, wie Du das siehst und warum DI nicht eine Form von IoC ist.

  3. Robert
    April 8, 2011 at 23:12 #

    Hallo Rainer, der Artikel ist sehr interessant. Die Verwendung von Events und Delegates ist jedoch nur eine Variation der Setter/Feld Injektion?

    Ein gute Idee aus dem Kommentaren finde ich ist, dass Plugins auch eine Form von IoC sind. Ich werde den Post gleich mal erweitern.

    • Rainer Hilmer
      April 9, 2011 at 9:19 #

      Hallo Robert,
      mir geht es nicht um Bildung oder Entkopplung von Beziehungen, sondern um die Abgabe der Kontrolle an eine andere Komponente – das was der Ausdruck „Inversion of Control“ wörtlich meint.