본문으로 건너뛰기

RegistryKey (복합 키)

런타임 레지스트리는 Dictionary<RegistryKey, Component> 형태입니다.
키는 의존성을 조회할 때 쓰는 타입선택적 문자열 Id의 쌍입니다.


무키(기본)와 Named

  • Id가 빈 문자열(string.Empty) 이면 무키 바인딩입니다.
    Resolve(Type)는 내부적으로 RegistryKey(type, defaultId)로 조회합니다.

  • 같은 Type에 서로 다른 Id 를 주면 별도 슬롯으로 공존합니다. (예 : IEnemyManager + "wave1" / "wave2").


동등성

  • Type 참조 동일 + Id 서수 비교(Ordinal) 로 문자열 동등.

  • GetHashCode는 타입 해시와 Id 해시를 결합합니다.

ToString()은 Named일 때 TypeName[id] 형태로 디버그에 쓰기 좋습니다.


조회 시 어떤 Type이 주입되는가

주입 필드 타입이 IAudioService 이면 Resolve(typeof(IAudioService), id) 경로로 들어가고,
등록 시 BindTypeIAudioService 인 키에 매핑되어 있어야 히트합니다.

정보

구체 타입만 키로 깔았고 인터페이스로 조회하면,
전체 매핑 경로(구체 + 구현 인터페이스 + 일부 베이스 타입)로 등록된 경우에만 인터페이스 키로도 잡힙니다.
반대로 BindType만 단일 키로 등록된 경우에는 그 추상 타입(또는 지정한 타입)으로만 조회가 안정적입니다.


공개 API와 키

앱 코드가 직접 RegistryKey 구조체를 만지지 않아도 됩니다.
Resolve(Type, string id), Unregister(Type, string id) 가 동일한 의미의 키를 사용합니다.

// 무키
var a = master.Resolve(typeof(IAudioService));

// Named
var b = master.Resolve(typeof(IAudioService), "music");

Pure C# Create<T>와의 관계

Create<T>의 생성자 파라미터에 붙은 [GlobalInject] / [SceneInject]RegistryKey(paramType, id) 로 해석됩니다.
해석에 쓰이는 resolver는 스코프마다 전역 우선·씬 우선 순서가 다르므로 런타임 등록·매핑 규칙과 함께 읽는 것이 좋습니다.