Dependency Injection
aus Wikipedia, der freien Enzyklopädie
Dependency Injection ist ein Entwurfsmuster und dient in einem objektorientierten System dazu, die Abhängigkeiten zwischen Komponenten oder Objekten zu minimieren.
Dependency Injection ist eine Anwendung des Prinzips der Inversion of Control (IoC), bezieht sich aber nur auf die Erzeugung und Initialisierung von Objekten. Sie kann als Verallgemeinerung der Fabrikmethoden verstanden werden. Die Funktionalität bleibt trotz dieser Kontrollumkehr als Einfügung enthalten. Dadurch ist es einfach möglich, Abhängigkeiten zu erkennen.
In einem klassisch aufgebauten OO-System ist jedes Objekt selbst dafür zuständig, seine Abhängigkeiten, also benötigte Objekte und Ressourcen, zu erzeugen und zu verwalten. Dafür muss jedes Objekt einige Kenntnisse seiner Umgebung mitbringen, die es zur Erfüllung seiner eigentlichen Aufgabe normalerweise nicht benötigen würde. Insbesondere muss es, um die entsprechenden Objekte erzeugen zu können, ihre konkrete Implementierung kennen.
Dependency Injection überträgt die Verantwortung für das Erzeugen und die Verknüpfung von Objekten an ein extern konfigurierbares Framework, entsprechend einem Komponentenmodell. Dadurch wird der Code des Objektes unabhängig von seiner Umgebung und von der konkreten Umsetzung der Klassen, die es benötigt. Das vermeidet unnötige Abhängigkeiten beim Kompilieren und erleichtert besonders die Erstellung von Unit-Tests. Andererseits wird so Programmlogik in Konfigurationsdateien ausgelagert, was die Übersichtlichkeit vermindern und die Wartung erschweren kann: die Entwickler müssen nun zum Verstehen des Codes noch die Konfiguration berücksichtigen, welche sich zudem manchen Hilfsmitteln der Codeanalyse (z.B. IDE-unterstütztes Finden von Abhängigkeiten oder Refactoring) entzieht.
Inhaltsverzeichnis |
[Bearbeiten] Existierende Frameworks
Es existieren verschiedene Frameworks für diverse Programmiersprachen und Plattformen, die Dependency Injection unterstützen:
[Bearbeiten] C++
[Bearbeiten] Java
- EJB ab Version 3.0
- Spring
- PicoContainer
- HiveMind
- Seam
- Guice.
- simject
- Java Server Faces
[Bearbeiten] PHP 5
- Garden
- Stubbles IoC
- FLOW3, Enterprise-PHP-Framework
- Symfony Components (BETA), Opensource PHP-Framework
[Bearbeiten] Ruby
[Bearbeiten] Python
[Bearbeiten] .NET
- Autofac
- Ninject
- Spring.NET
- Structuremap
- Unity Application Block (Unity)
- Puzzle.NFactory
- Castle MicroKernel und Windsor Container
- NauckIT.MicroKernel
- Managed Extensibility Framework
- ObjectBuilder
- PicoContainer.NET
- WINTER4NET

