facebook twitter hatena line email

「Unity/DIフレームワーク/Extenject/非MonoBehavior」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(サンプル)
(非MonoBehavior)
 
行1: 行1:
 
==非MonoBehavior==
 
==非MonoBehavior==
MonoBehaviorではないが、MonoBehaviorのように動かせるクラスをDIする方法。
+
MonoBehaviorではないが、MonoBehaviorのようなライフサイクルで、動かせるクラスをDIする方法。
  
 
参考:https://light11.hatenadiary.com/entry/2019/02/28/001135
 
参考:https://light11.hatenadiary.com/entry/2019/02/28/001135
 +
 
==サンプル==
 
==サンプル==
 
MonoBehaviourInstaller.cs
 
MonoBehaviourInstaller.cs

2023年11月15日 (水) 12:37時点における最新版

非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();
    }
}