using System.Collections.Generic; using Reflex.Core; using UnityEngine; using UnityEngine.Pool; namespace Reflex.Injectors { public static class GameObjectInjector { public static void InjectSingle(GameObject gameObject, Container container) { if (gameObject.TryGetComponent(out var monoBehaviour)) { AttributeInjector.Inject(monoBehaviour, container); } } public static void InjectObject(GameObject gameObject, Container container) { using var pooledObject = ListPool.Get(out var monoBehaviours); gameObject.GetComponents(monoBehaviours); for (var i = 0; i < monoBehaviours.Count; i++) { var monoBehaviour = monoBehaviours[i]; if (monoBehaviour != null) { AttributeInjector.Inject(monoBehaviour, container); } } } public static void InjectRecursive(GameObject gameObject, Container container) { using var pooledObject = ListPool.Get(out var monoBehaviours); gameObject.GetComponentsInChildren(true, monoBehaviours); for (var i = 0; i < monoBehaviours.Count; i++) { var monoBehaviour = monoBehaviours[i]; if (monoBehaviour != null) { AttributeInjector.Inject(monoBehaviour, container); } } } public static void InjectRecursiveMany(List gameObject, Container container) { using var pooledObject = ListPool.Get(out var monoBehaviours); for (var i = 0; i < gameObject.Count; i++) { gameObject[i].GetComponentsInChildren(true, monoBehaviours); for (var j = 0; j < monoBehaviours.Count; j++) { var monoBehaviour = monoBehaviours[j]; if (monoBehaviour != null) { AttributeInjector.Inject(monoBehaviour, container); } } } } } }