📦 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 HttpClientdu 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