L'injection de dépendances d'Angular est hiérarchique : les injecteurs forment un arbre qui reflète l'arborescence des composants/modules. Quand un composant demande une dépendance, Angular remonte vers le haut l'arbre des injecteurs jusqu'à trouver un provider — qui contrôle si vous obtenez un singleton partagé ou une instance distincte par composant.
Pourquoi c'est important
Root injector (app-wide) ← providedIn: 'root' lives here (one singleton)
└─ Module/Route injectors
└─ Component injector ← providers: [...] in @Component
└─ Child component injector
