Skip to main content

스코핑 개요

note

커스텀을 원한다면, 집중 RND를 요구하는 구간입니다.

UNInject는 의존성을 어느 범위에서 찾고, 얼마나 오래 유지할지를 세 층으로 나눕니다.
세 층 모두 IScope 계약(Register / Resolve / Create<T> / Unregister 등)을 구현하지만,
데이터가 살아 있는 공간조회 순서가 다릅니다.


설계

담당 타입수명(전형적)매니저 마커
전역MasterInstallerDontDestroyOnLoad, 앱 전체[Referral]
SceneInstaller현재 로드된 씬(인스턴스는 정적 싱글톤 슬롯 하나)[SceneReferral]
로컬ObjectInstaller붙은 서브트리, 필요 시 _parentScope로 상위 연결로컬 Register + [Inject]
  • 전역·씬은 “매니저 레이어”를 Component 레지스트리로 노출합니다.

  • 로컬은 같은 루트 아래 [Inject] 직렬화 + [GlobalInject] / [SceneInject] 런타임 주입을 함께 다룹니다.


IScope로 통일 설계된 부분

  • Named 바인딩Resolve(Type, string id), ResolveAs<T>(string id), Unregister(Type, string id).

  • 런타임 등록Register(Component), Register(Component, MonoBehaviour owner).

  • Create<T>() — 순수 C#·ScriptableObjectMonoBehaviour가 아닌 class만 대상.
    생성자·필드 주입 후 ITickable 계열이면 해당 Installer의 Update/FixedUpdate/LateUpdate 에 붙습니다.

각 스코프가 Create<T>에서 Component 의존성을 어디서 먼저 찾는지는 서로 다릅니다(실행 순서, Resolve 체인).


주입 필드가 스코프를 고르는 법

  • [GlobalInject] — 전역 레지스트리(MasterInstaller)를 통해 해석.

  • [SceneInject] — 씬 레지스트리(SceneInstaller)를 통해 해석.

  • [Inject] — 에디터 Bake로 같은 ObjectInstaller 트리 안의 컴포넌트를 직렬화 연결.

ObjectInstallerTryInjectTarget을 실행할 때 씬 필드를 먼저,
그다음 전역 필드를 채웁니다. 같은 타입을 씬·전역 둘 다에서 쓰면 의도한 속성을 정확히 나누는 것이 중요합니다.


Scoping 문서 요약