Created: 12 Feb 2026
Last updated: 15 Feb 2026
Dependency Injection (DI)
Siehe: Objektorientierte Programmierung
Ein simples aber wichtiges Programmier-Pattern, bei dem Objekte oder Funktionen andere Objekte/Funktionen von außen bereitgestellt bekommen, anstatt sie intern selbst zu erzeugen:
// OHNE Dependency Injection: Database wird intern erstellt
class Storage {
private database: Database;
constructor() {
this.database = new Database('db.sqlite');
//...
}
}
// MIT Dependency Injection: Database wird in constructor übergeben
class Storage {
private database: Database;
constructor(database: Database) {
this.database = database;
//...
}
}
Damit setzt es vor allem konkret das Dependency Inversion Principle um.
Es wird sichergestellt, dass “Clients”, die einen bestimmten “Service” nutzen möchten, nicht wissen müssen, wie dieser konstruiert wird.
Terminologie: (die vier “Rollen”, die bei DI involviert sind)
- Services & Clients: Ein Service ist eine Klasse mit nützlicher Funktionalität. Ein Client ist eine Klasse, die solche Services verwendet. Die Services, die ein Client verwendet sind dessen dependencies.
- Interfaces: Clients sollten nicht wissen, wie dessen dependencies implementiert sind, nur wie deren Schnittstelle aussieht.
- Injectors: Ein Injector (auch Assembler, Container, Provider, Factory) bereitet Services vor, die von Clients benutzt werden.
Analogie/Beispiel:
- Autos können als Services verstanden werden, welche die nützliche Funktionalität haben, Menschen von einem Ort zum nächsten zu transportieren
- Die Motoren der Autos benötigen etwa Diesel oder Elektrizität, aber dieses Detail des Services ist für den Client (etwa ein Passagier) irrelevant.
- Autos haben ein uniformes Interface (Pedale, Lenkrad, etc.), sodass es am Ende irrelevant ist, welcher Motor genau in der Fabrik (Injector) eingebaut wurde.