Angulars DI er hierarkisk: injektorer danner et tre som gjenspeiler komponenten/modultreet. Når en komponent ber om en avhengighet, går Angular oppover injektortræet til det finner en tilbyder — som kontrollerer om du får en delt singleton eller en separat forekomst per komponent.
Injektoren hierarki
Root injector (app-wide) ← providedIn: 'root' lives here (one singleton)
└─ Module/Route injectors
└─ Component injector ← providers: [...] in @Component
└─ Child component injector
En oppslag starter ved den forespørrende komponenten og bobler opp til roten. Den funnet tilbyderen vinner.
