Zum Inhalt springen

Dependency Injection

Männliche Person, frontal, schaut in die Kamera; trägt kariertes Hemd über dunkelfarbigem T‑Shirt; heller Innenraum mit unscharfem Monitor oder Poster links und Fenster rechts.

von Richard Albrecht am 08.11.2026

Dependency Injection ist ein Entwurfsmuster, bei dem ein Objekt die Dinge, die es zum Arbeiten braucht, von außen gereicht bekommt, statt sie selbst zu erzeugen. Den Namen hat Martin Fowler 2004 in einem Aufsatz geprägt.

Dependency Injection

Ein Entwurfsmuster, bei dem die Abhängigkeiten eines Objekts von außen übergeben werden, meist über den Konstruktor.
Beispiel: „Dank Dependency Injection bekommt der Mailversand im Test einen Ersatz, der nur protokolliert und nichts verschickt.“

Auch: Abhängigkeitsinjektion, abgekürzt DI.

Verwandt: Inversion of Control, das allgemeinere Prinzip, nach dem ein Framework den Ablauf steuert und den eigenen Code aufruft.

Wie Dependency Injection funktioniert

Eine Klasse, die Bestellungen verarbeitet, braucht einen Zugang zur Datenbank und einen Mailversand. Ohne das Muster erzeugt sie beides selbst. Mit Dependency Injection nennt sie beides im Konstruktor, und wer die Klasse erzeugt, reicht die passenden Objekte hinein.

class Bestellabschluss
{
    public function __construct(
        private Bestellungen $bestellungen,
        private Mailer $mailer,
    ) {}
}

Die Klasse weiß dann nur noch, was sie braucht, und nicht mehr, woher es kommt.

Der Container bei Dependency Injection

In Frameworks wie Laravel, Symfony und Spring übernimmt ein Container das Hineinreichen. Er liest, was eine Klasse im Konstruktor verlangt, erzeugt die passenden Objekte und gibt sie weiter, auch über mehrere Ebenen hinweg.

Warum sich Dependency Injection lohnt

Vor allem wegen der Tests. Eine Klasse, die ihre Abhängigkeiten von außen bekommt, lässt sich im Test mit Ersatzobjekten füttern, die keine echte Datenbank und keinen echten Mailserver brauchen.

Dazu kommt Austauschbarkeit: Wechselt der Mailanbieter, wird an einer Stelle festgelegt, welche Umsetzung der Container liefert, und alle Klassen nutzen sie.

Siehe auch:

Symfony

Ein PHP-Framework aus wiederverwendbaren Komponenten, auf dem viele andere Systeme aufbauen.

#Programmiersprachen

Laravel

Ein PHP-Framework für Webanwendungen, bekannt für seine lesbare Schreibweise und sein Ökosystem.

#Programmiersprachen

Spring (Java)

Das verbreitetste Framework für Unternehmensanwendungen in Java.

#Programmiersprachen

NestJS

Ein TypeScript-Framework für Server in Node.js mit fester Struktur nach dem Vorbild von Angular.

#Programmiersprachen

Klassen (Objektorientierung)

Die Vorlage, nach der gleichartige Objekte gebaut werden.

#Programmiersprachen

Abhängigkeit (Dependency)

Fremder Code, ohne den dein Projekt nicht läuft.

#Programmiersprachen