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) 경로로 들어가고,
등록 시 BindType이 IAudioService 인 키에 매핑되어 있어야 히트합니다.
구체 타입만 키로 깔았고 인터페이스로 조회하면,
전체 매핑 경로(구체 + 구현 인터페이스 + 일부 베이스 타입)로 등록된 경우에만 인터페이스 키로도 잡힙니다.
반대로 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는 스코프마다 전역 우선·씬 우선 순서가 다르므로 런타임 등록·매핑 규칙과 함께 읽는 것이 좋습니다.