Angular's DI is hiërarchisch: injectors vormen een boom die de component/module boom weerspiegelt. Wanneer een component een afhankelijkheid aanvraagt, loopt Angular omhoog in de injector boom totdat het een provider vindt — die bepaalt of u een gedeeld singleton krijgt of een apart exemplaar per component.
De injector hiërarchie
Root injector (app-wide) ← providedIn: 'root' lives here (one singleton)
└─ Module/Route injectors
└─ Component injector ← providers: [...] in @Component
└─ Child component injector
Een lookup begint bij de aanvragende component en bruist omhoog naar de root. De gevonden provider wint.
