interface Logger { log(s: string): void }DI token은 지워지는 타입과 런타임 provider graph를 잇는다
인터페이스는 타입 검사 뒤 사라진다. 컨테이너가 실행 중 의존성을 찾으려면 class·string·symbol 같은 실제 값과 provider recipe가 필요하다.
const LOGGER = Symbol('LOGGER')token을 생성 recipe와 모듈 가시성에 연결
하위 token을 재귀 해결하고 scope cache 적용
서비스는 구체 구현의 new를 알지 않는다.
useClasstoken을 지정 class provider에 연결
useValue이미 만든 객체·설정·test fake 제공
useFactory주입된 입력으로 런타임 값을 생성
useExisting기존 provider에 별도 token alias 부여
앱 전체가 한 인스턴스를 공유한다. 요청별 mutable 상태를 두지 않는다.
요청마다 새 인스턴스. 의존 경로 위로 scope가 전파되고 생성 비용이 든다.
각 consumer가 전용 인스턴스를 받는다. 호출마다 새 값이라는 뜻은 아니다.
실패 진단: resolve 실패는 token·등록·module 가시성부터 본다. string 충돌은 symbol/상수로 줄이고 A↔B는 역할을 분리한다. forwardRef는 초기화 순서를 보장하지 않는다.