facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==非MonoBehavior== MonoBehaviorではないが、MonoBehaviorのように動かせるクラスをDIする方法。 参考:https://light11.hatenadiary.com/entry/2019/0...」)
 
(非MonoBehavior)
 
(同じ利用者による、間の1版が非表示)
行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
行69: 行70:
 
     {
 
     {
 
         Debug.Log("dispose.");
 
         Debug.Log("dispose.");
 +
    }
 +
}
 +
</pre>
 +
 +
==記述を簡単に==
 +
BindInterfacesAndSelfToを使うと、上記ライフサイクルが自動で、ついてくる。
 +
以下は、上記と同じ、処理となる。
 +
 +
MonoBehaviourInstaller.cs
 +
<pre>
 +
using Zenject;
 +
using System;
 +
 +
public class MonoBehaviourInstaller : MonoInstaller
 +
{
 +
    public override void InstallBindings()
 +
    {
 +
        Container
 +
            .BindInterfacesAndSelfTo<MonoBehaviourLogic>()
 +
            .AsTransient();
 
     }
 
     }
 
}
 
}
 
</pre>
 
</pre>

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