Skip to main content

중복 등록

같은 RegistryKey 에 서로 다른 컴포넌트가 매핑되려 하면 충돌로 처리됩니다.
언제 발생하는지는 등록 경로에 따라 조금 다릅니다.


런타임 딕셔너리 (TryAdd)

이미 같은 키에 다른 인스턴스가 들어 있으면

  • 경고 로그를 남기고

  • 먼저 등록된 쪽을 유지하며 새 값은 무시합니다.

메시지에는 스코프 태그(MasterInstaller / SceneInstaller / ObjectInstaller), 키,
기존·무시 대상 오브젝트 이름·타입이 포함됩니다.


에디터 베이크 리스트 (Refresh)

Refresh Global Registry / Refresh Scene Registry 는 직렬화 리스트를 채울 때
HashSet<RegistryKey> 로 이미 본 키를 추적합니다.

  • 동일 키로 두 컴포넌트가 잡히면 경고만 출력하고 첫 번째만 리스트에 유지합니다.

그 결과 런타임 재구성 시에도 동일 키는 하나의 소스만 남습니다.


실무 요령 (휴먼 에러)

  1. 같은 씬에 동일 [Referral(typeof(IFoo))] 무키 매니저가 둘 — 둘 다 전체 매핑이면 IFoo 키가 중복 후보가 됩니다.

  2. Named Id를 잘못 복사해 서로 다른 오브젝트가 같은 Id를 씀.

  3. 전체 매핑으로 올린 뒤, 의도치 않게 같은 인터페이스 키가 두 구현체에서 충돌.

해결 방향 :

  • 추상 타입으로 하나만 노출하려면 BindType 단일 키 경로를 쓰거나 Named로 분리합니다.

  • 팀 규칙으로 “씬당 매니저 인스턴스는 1개" 등의 컨벤션을 맞춥니다.


Unregister와 중복

Unregister(Type) / Unregister(Type, id)해당 키 한 줄만 제거합니다.
한 컴포넌트가 여러 키를 가진 경우 Unregister(Component) 가 남은 키를 한 번에 정리합니다.

// 동일 인터페이스 무키 두 개가 있으면 Resolve는 “먼저 이긴” 쪽만 안정적
// → Named로 분리하거나 하나만 두는 것이 안전