DI token은 지워지는 타입과 런타임 provider graph를 잇는다

인터페이스는 타입 검사 뒤 사라진다. 컨테이너가 실행 중 의존성을 찾으려면 class·string·symbol 같은 실제 값과 provider recipe가 필요하다.

01 · TYPE계약 정의interface Logger { log(s: string): void }
02 · TOKEN런타임 키const LOGGER = Symbol('LOGGER')
03 · BINDprovider 등록

token을 생성 recipe와 모듈 가시성에 연결

04 · RESOLVEgraph 탐색

하위 token을 재귀 해결하고 scope cache 적용

05 · INJECT인스턴스 주입

서비스는 구체 구현의 new를 알지 않는다.

useClass

token을 지정 class provider에 연결

useValue

이미 만든 객체·설정·test fake 제공

useFactory

주입된 입력으로 런타임 값을 생성

useExisting

기존 provider에 별도 token alias 부여

DEFAULT

앱 전체가 한 인스턴스를 공유한다. 요청별 mutable 상태를 두지 않는다.

REQUEST

요청마다 새 인스턴스. 의존 경로 위로 scope가 전파되고 생성 비용이 든다.

TRANSIENT

각 consumer가 전용 인스턴스를 받는다. 호출마다 새 값이라는 뜻은 아니다.

실패 진단: resolve 실패는 token·등록·module 가시성부터 본다. string 충돌은 symbol/상수로 줄이고 A↔B는 역할을 분리한다. forwardRef는 초기화 순서를 보장하지 않는다.