cdi는 Python에서 타입 힌트를 바탕으로 의존성을 주입하는 라이브러리다. 제작자는 설정을 단순하게 하고 Python 기준으로 빠른 동작을 목표로 한다고 설명한다.

설치 명령은 다음과 같다.

bash
pip install cdi-di

cdi는 전방 참조 해석, 유니온 타입, 순환 의존성을 위한 Lazy, Contextvar, 비싱글턴 인스턴스를 위한 Transient, 제네릭과 TypeVar, 인스턴스 수 제한, 스코프 상속을 지원한다고 안내한다. 반면 리스트 값과 주입 가능한 반환 타입으로 쓰는 TypeVar는 지원하지 않는다. 기본 구현을 지정해 주입하는 기능도 지원하지 않는다.

타입을 Container에 등록하고, Scope에서 인스턴스를 가져오는 방식이다. 등록되지 않은 타입은 기본적으로 생성하지 않고 오류를 낸다. EvaluateUnknownTypesPolicy를 스코프에 전달하면 이 동작을 바꿀 수 있다. 인스턴스는 스코프 안에서 한 번 생성된 뒤 재사용되며, 같은 컨테이너를 쓰더라도 서로 다른 스코프는 인스턴스를 공유하지 않는다.

라이브러리에 명시적인 async 인터페이스는 없지만 비동기 코드에서 사용할 수 있다고 설명한다. 내부에서 입출력을 수행하거나 제어권을 넘기지 않으므로 비동기 인터페이스를 추가할 이유가 없다는 것이 제작자의 설명이다. 여러 asyncio 실행기를 함께 쓰는 경우 각 실행기가 별도 스레드에서 동작하며, 내부 객체가 스레드 사이에서 공유될 때를 대비해 RLock을 둔다고 안내한다.

전방 참조가 포함된 타입은 참조 대상이 정의된 뒤 Container.update_forward_refs를 호출해야 사용할 수 있다. 자세한 사용법과 제약은 프로젝트 문서에서 확인할 수 있다.