HasAnyInjectField
TypeDataCache의 정적 메서드로, 해당 타입에 [GlobalInject] 또는 [SceneInject] 필드가 하나라도 있는지를 빠르게 판별합니다.
public static bool HasAnyInjectField(Type type);
포함되는 것 / 안 되는 것
-
포함: 인스턴스 필드 중
[GlobalInject]또는[SceneInject]가 하나라도 붙은 경우. -
포함하지 않음:
[Inject]만 있는 타입은false입니다. 로컬 Bake 필드는 이 API와 무관합니다.
따라서 ObjectInstaller.InjectGlobalDependencies는 [Inject]만 있는 컴포넌트는 이 분기에서 건너뛰고,
TryInjectTarget을 호출하지 않습니다. 로컬 전용 참조만 쓰는 뷰는 Awake 자동 주입 루프에 안 탄다고 이해하시면 됩니다.
캐시 동작
-
양성(필드 있음):
GetGlobalInjectFields/GetSceneInjectFields결과가 이미 리스트로 캐시됩니다. -
음성(없음):
_noInjectTypes집합에 타입을 넣어, 이후 호출은 즉시false(O(1)).
도메인 리로드 시 정적 캐시는 SubsystemRegistration 훅에서 비워집니다.
Roslyn 플랜과의 관계
GetGlobalInjectFields / GetSceneInjectFields는 내부적으로 생성된 플랜 캐시가 있으면 그것을 먼저 반환합니다. HasAnyInjectField는 그 위에 얹힌 “있음/없음” 판별이므로, 플랜이 있는 타입은 리스트가 비어 있지 않다면 true 가 됩니다.
활용 시점
-
ObjectInstaller.InjectGlobalDependencies— 자식 전체 스캔 시 핫 패스. -
직접 호출해 불필요한
TryInjectTarget호출을 줄이고 싶을 때.
// [Inject]만 있는 MonoBehaviour는 HasAnyInjectField == false
// → Awake의 InjectGlobalDependencies가 TryInjectTarget을 부르지 않음