Angular의 DI는 계층적입니다. injector는 컴포넌트/모듈 트리를 반영하는 트리를 형성합니다. 컴포넌트가 의존성을 요청하면, Angular는 provider를 찾을 때까지 injector 트리를 위로 거슬러 올라갑니다. 이것이 공유 싱글턴을 받을지, 컴포넌트마다 별도의 인스턴스를 받을지를 제어합니다.
injector 계층
루트 injector (앱 전체) ← providedIn: 'root'가 여기 위치 (싱글턴 하나)
└─ 모듈/라우트 injector
└─ 컴포넌트 injector ← @Component의 providers: [...]
└─ 자식 컴포넌트 injector
조회는 요청한 컴포넌트에서 시작하여 루트까지 거슬러 올라갑니다. 발견된 provider가 채택됩니다.
