Suchen

Definition „DI“ Was ist Dependency Injection?

| Autor / Redakteur: HJL / Stephan Augsten

Der Begriff Dependency Injection, kurz DI, steht in direktem Zusammenhang mit der objektorientierten Programmierung. Objekte oder Klassen erhalten die Zuweisung ihrer Abhängigkeiten durch Aufruf spezifischer Methoden von einer externen Instanz.

Firma zum Thema

Dependency Injection zeichnet sich dadurch aus, dass konkrete Weisungen zu Abhängigkeiten direkt in die Software-Module injiziert werden.
Dependency Injection zeichnet sich dadurch aus, dass konkrete Weisungen zu Abhängigkeiten direkt in die Software-Module injiziert werden.
(Bild gemeinfrei: Paweł Czerwiński - Unsplash.com)

Im Jahr 2004 postete der Softwareentwickler Martin Fowler einen richtungweisenden Beitrag auf seiner Website. Als Ausgangspunkt wählte er das zu dieser Zeit bereits bestehende Konzept der „Inversion of Control", zu Deutsch: „Umkehrung des Kontrollflusses". Dieses Verfahren kritisierte er als zu allgemein und deshalb auch verwirrend.

Unter der Bezeichnung „Dependency Injection“ (DI) beschrieb Fowler eine konkrete Präzisierung. Das inzwischen umgesetzte Ziel besteht darin, Beziehungen zwischen Komponenten und Objekten deklarierend zu beschreiben. Gleichzeitig sollen Abhängigkeiten untereinander auf ein Minimum reduziert werden.

Martin Fowler schuf mit DI eine spezielle, fortentwickelte Form des bestehenden Verfahrensprinzips „Inversion of Control". Das bestehende Prinzip der Injektion von Referenzen wurde ergänzt. Sogenannte Service-Fabriken wurden hinzugefügt.

Eine „Fabrik“ bezeichnet Objekte, die aus sich selbst heraus andere Objekte erzeugen können. Mit dieser DI-Technik sollen Abhängigkeiten zwischen Klassen und Modulen unterbunden werden. Die Verantwortlichkeit für diese Prozessabläufe liegt stets beim Framework.

Drei DI-Lösungswege für objektorientierte Programmierung

Erreicht wurde dieses Ziel, indem Software-Module konkrete Weisungen zu ihren Abhängigkeiten erhalten. Dies funktioniert durch den Aufruf von Methoden. Eine Methode wird einer Klasse oder einem Objekt-Modul von externer Seite zugewiesen, sozusagen injiziert. So erklärt sich der Wortinhalt der „Injection". Als Plattform für die Durchführung der Injektion dient ein Framework (z. B. Spring oder Unity).

Das Verfahren der Dependency Injection unterscheidet drei verschiedene Vorgehensweisen:

Setter Injection: Bei der Setter Injection sorgt das DI Framwork mit Hilfe der Setter-Methode „setLogger“ für die Injektion der benötigten Weisungen aus dem externen Methoden-Vorrat.

Constructor Injection: Beim Verfahren der Constructor Injection wird die Abhängigkeit als Konstruktor-Argument aus dem „Constructor“ für die entsprechende Klasse übergeben.

Interface Injection: Im Falle der Interface Injection erfolgt die Injektion im Schnittstellen-Verfahren, auf dem Weg eines speziell implementierten Interfaces.

Ideale Umgebungsbedingungen: Frameworks & Programmiersprachen

Dependency Injection ist eingebettet in ein Umfeld aus unterschiedlichen Framewoks. Auf diesem Wege erschließt sich für DI eine breite Palette an Plattformen und Programmiersprachen. Die folgende Auflistung der am Markt vorzufindenden Frameworks unterstreicht die Einsatzbandbreite von DI:

Java: EJB 3.0; Guice; Seam; Spring

.NET: LightCore; Ninject; ObjectBuilder; PicoContainer; Structuremap; Unity

Python: PyContainer

Ruby: Copland; Needle

C++: DSM

PHGP: Garden; Symphony Components; Stubbles IoC.

Zusammenfassend lässt sich fest stellen, dass dank dem Entwurfsmuster Dependency Incection die Abhängigkeiten von Klassen auf ein Minimum reduziert werden. Die Zusammenführung einer Software-Anwendung aus verschiedenen Modulen gestaltet sich vorteilhaft.

Das Verfahren unterstützt verschiedene Arten von Konfigurationen. So besteht die Möglichkeit, über das Framework beliebige Konfigurationsformen durchzuspielen, indem spezielle Test-Konfigurationen aufgebaut und untersucht werden. Das besondere Alleinstellungsmerkmal von DI, nämlich die Entkoppelung von Modulen, macht dies möglich.

(ID:45827461)