DI của Angular là phân cấp (hierarchical): các injector tạo thành một cây phản ánh cây component/module. Khi một component yêu cầu một phụ thuộc, Angular đi lên cây injector cho tới khi tìm thấy một provider — điều này quyết định bạn nhận được một singleton dùng chung hay một instance riêng cho mỗi component.
Hệ phân cấp injector
Root injector (toàn ứng dụng) ← providedIn: 'root' nằm ở đây (một singleton)
└─ Injector của Module/Route
└─ Injector của Component ← providers: [...] trong @Component
└─ Injector của component con
