TryInjectTarget / InjectTarget
ObjectInstaller가 MonoBehaviour 한 인스턴스에 대해 [SceneInject]·[GlobalInject] 필드를 채우는 핵심 API입니다.
시그니처
public void InjectTarget(MonoBehaviour target);
public bool TryInjectTarget(MonoBehaviour target, bool logWarnings = true, bool isReinjection = false);
-
InjectTarget—TryInjectTarget(target, logWarnings: true)와 동일합니다. -
TryInjectTarget— 성공 여부를bool로 반환합니다.
target이 null이면 false이고 아무 것도 하지 않습니다.
주입 순서
-
TypeDataCache.GetSceneInjectFields(type)로 얻은 목록을 순서대로 처리합니다.
각 필드에 대해Resolve(field.FieldType, field.Id)(즉ObjectInstaller의 전체 Resolve 체인: 로컬 → 부모 → 씬 → 전역). -
그다음
GetGlobalInjectFields(type)로 동일합니다.
CachedInjectField에는 이름, 필드 타입, 컴파일/리플렉션으로 만든 Setter, Optional, Id 가 들어 있습니다.
성공·실패 규칙
-
해석 결과가
null이고Optional이 아니면 해당 필드는 실패로 집계되고,success가false가 됩니다. -
logWarnings == true이면 실패한 필드마다[ObjectInstaller]프리픽스 경고 로그가 나갑니다.
(필드명, 타입, Named면id, 대상 오브젝트 이름 포함).
모든 필수 필드가 채워지면 success == true입니다.
IInjected / 풀 재주입
success == true일 때만 후처리가 호출됩니다.
-
isReinjection == false이고 대상이IInjected이면OnInjected()를 호출합니다. -
isReinjection == true이고 대상이IPoolInjectionTarget이면OnPoolGet()을 호출합니다.
즉 첫 주입 완료는 IInjected, 풀에서 다시 꺼낸 뒤 주입은 OnPoolGet 경로로 나눕니다.
굉장히. 매우 강력한 기능입니다.
유니티 라이프사이클에서 지원할 수 없는 "주입 완료 시점" 을 펑션으로 제공합니다.
객체 초기화 시점을 잡기 매우 용이합니다.
프로파일링
UNINJECT_PROFILING 심볼이 켜져 있으면 타입별로 주입에 걸린 시간이 UNInjectProfiler 에 기록됩니다.
성능 검증용 심벌임으로, 필요에 따라 사용하시면 됩니다.
호출 시점 예
-
Awake—InjectGlobalDependencies가 자식 전체에 대해HasAnyInjectField가 참인 타입만TryInjectTarget호출. -
수동 — 스폰 직후
InjectTarget(instance). -
풀 —
InjectTargetFromPool→ 내부적으로TryInjectTarget(..., isReinjection: true).
// 스폰 직후 한 컴포넌트만
installer.InjectTarget(spawnedView);
// 실패 허용·로그 끄기
if (!installer.TryInjectTarget(spawnedView, logWarnings: false))
{
// 풀 반환 등
}