Unity/DIフレームワーク/Extenject/非MonoBehavior
提供: 初心者エンジニアの簡易メモ
非MonoBehavior
MonoBehaviorではないが、MonoBehaviorのように動かせるクラスをDIする方法。
参考:https://light11.hatenadiary.com/entry/2019/02/28/001135
サンプル
MonoBehaviourInstaller.cs
using Zenject;
using System;
public class MonoBehaviourInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container
.Bind(
typeof(MonoBehaviourLogic),
typeof(IInitializable),
typeof(ITickable),
typeof(ILateTickable),
typeof(IFixedTickable),
typeof(IDisposable)
)
.To<MonoBehaviourLogic>()
.AsTransient();
}
}
MonoBehaviourMain.cs
using UnityEngine;
using Zenject;
public class MonoBehaviourMain : MonoBehaviour
{
[Inject] MonoBehaviourLogic _logic;
}
MonoBehaviourLogic.cs
using UnityEngine;
using Zenject;
using System;
public class MonoBehaviourLogic : IInitializable, ITickable, ILateTickable, IFixedTickable, IDisposable
{
public void Initialize()
{
Debug.Log("initialize.");
}
public void Tick()
{
Debug.Log("Tick.");
}
public void LateTick()
{
Debug.Log("LateTick.");
}
public void FixedTick()
{
Debug.Log("FixedTick.");
}
public void Dispose()
{
Debug.Log("dispose.");
}
}
記述を簡単に
BindInterfacesAndSelfToを使うと、上記ライフサイクルが自動で、ついてくる。 以下は、上記と同じ、処理となる。
MonoBehaviourInstaller.cs
using Zenject;
using System;
public class MonoBehaviourInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container
.BindInterfacesAndSelfTo<MonoBehaviourLogic>()
.AsTransient();
}
}
