📦 Angular Dependency Injection – Verstehen, nutzen, meistern
(Für Angular 17–19: Von Basics bis Profipatterns)
Angular wäre nicht Angular ohne Dependency Injection (DI).
Aber wie tief verstehst du, was wirklich passiert, wenn du inject()
oder @Injectable()
nutzt?
In diesem Beitrag steigen wir tief ein:
1️⃣ Die Essenz von Dependency Injection in Angular
Dependency Injection = Trennung von Erstellung und Nutzung.
Statt selbst Services zu instanziieren, bekommst du sie „geliefert“ – durch den Injector Tree.
Beispiel:
@Injectable()
export class ApiService {
constructor(private http: HttpClient) {}
}
Das Framework sorgt für die Bereitstellung des HttpClient
– du musst ihn nicht selbst bauen.
2️⃣ providedIn
verstehen: root
, platform
, any
& self
Der DI-Scope entscheidet, wo und wie oft dein Service existiert.
Option | Bedeutung |
---|---|
root |
Singleton im gesamten App-Injector |
platform |
Singleton plattformweit (z.B. Microfrontends mit mehreren Angular-Apps) |
any |
Je Feature-Modul/Standalone Component ein eigener Instance |
self |
Nur wenn explizit im gleichen Injector vorhanden – sonst Fehlermeldung |
3️⃣ inject()
vs. Konstruktor – wann was?
Seit Angular 14 kannst du inject()
außerhalb von Konstruktoren nutzen:
const router = inject(Router);
✅ Ideal für Standalone Functions, Signals, Provider Factories
4️⃣ DI in Signals, Computed & Effects
Signals brauchen Services? Kein Problem:
const mySignal = computed(() => inject(MyService).getData());
✅ So kannst du auch in Functional Core auf DI setzen – ohne Angular-typische Klassenstruktur.
5️⃣ Tree-shaking & Singleton-Fallen
DI ist bequem – aber auch gefährlich für die Bundle-Size:
- Services mit
providedIn: 'root'
bleiben immer im Bundle – auch wenn ungenutzt. - Nur
inject()
ohne Verwendung + korrektes Tree-Shaking sorgt für Wegfall.
Tipp: Vermeide Side Effects in Konstruktoren – sonst landen sie sicher im Build!
Fazit
Dependency Injection ist nicht nur ein Tool –
es ist das Zentralnervensystem von Angular.
✅ Nutze es bewusst.
✅ Verstehe die Scopes.
✅ Nutze inject()
strategisch.
👉 Nächster Beitrag:🧠 Angular Lifecycle – Was wirklich passiert (und wann)
Hast du Fragen oder ein Projekt im Kopf?
Ich freue mich auf deine Nachricht. Lass uns gemeinsam deine Vision verwirklichen!
Jetzt Kontakt aufnehmen