Files
RebootKit/Runtime/Engine/Code/Foundation/SceneDI.cs

43 lines
1.4 KiB
C#

using UnityEngine;
using UnityEngine.Assertions;
namespace RebootKit.Engine.Foundation {
public interface IDependencyInstaller {
void Install(DIContext context);
}
public abstract class SceneDependencyInstaller : MonoBehaviour, IDependencyInstaller {
public abstract void Install(DIContext context);
}
[DefaultExecutionOrder(-1000)]
public class SceneDI : MonoBehaviour, IDependencyInstaller {
static readonly Logger s_logger = new(nameof(SceneDI));
[SerializeField] SceneDependencyInstaller[] m_Installers;
void Awake() {
DIContext context = RR.DIContext;
foreach (GameObject root in gameObject.scene.GetRootGameObjects()) {
context.InjectGameObject(root);
}
}
public void Install(DIContext context) {
foreach (SceneDependencyInstaller installer in m_Installers) {
installer.Install(context);
}
}
}
public static class DIContextGameObjectEx {
public static void InjectGameObject(this DIContext context, GameObject gameObject, bool injectChildren = true) {
Assert.IsNotNull(gameObject);
Component[] components = injectChildren ? gameObject.GetComponentsInChildren<Component>() : gameObject.GetComponents<Component>();
foreach (Component component in components) {
context.Inject(component);
}
}
}
}