DI Angular bersifat hierarki: injector membentuk pohon yang mencerminkan pohon komponen/modul. Ketika komponen meminta dependensi, Angular berjalan ke atas pohon injector hingga menemukan provider — yang mengontrol apakah Anda mendapatkan singleton bersama atau instance terpisah per komponen.
Hierarki injector
Root injector (app-wide) ← providedIn: 'root' lives here (one singleton)
└─ Module/Route injectors
└─ Component injector ← providers: [...] in @Component
└─ Child component injector
Pencarian dimulai dari komponen yang meminta dan gelembung naik ke akar. Provider yang ditemukan menang.
