facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の6版が非表示)
行1: 行1:
==Extenjectとは==
+
[[Unity/DIフレームワーク/Extenject/基本]]
UnityのDIフレームワーク。Zenjectは、作者が前務めてた会社で作られたDIフレームワークの名前。
+
  
==ダウンロード==
+
[[Unity/DIフレームワーク/Extenject/SceneLoader]]
unityのassetstore
+
https://assetstore.unity.com/packages/tools/utilities/extenject-dependency-injection-ioc-157735
+
  
公式
+
[[Unity/DIフレームワーク/Extenject/Scene間共有]]
https://github.com/modesttree/Zenject/releases
+
  
==サンプル==
+
[[Unity/DIフレームワーク/Extenject/非MonoBehavior]]
Installerからデータを入れて、[Inject]部分に入る。
+
  
ILogic.cs
+
[[Unity/DIフレームワーク/Extenject/ProjectContext]]
<pre>
+
public interface ILogic
+
{
+
    bool Exec();
+
}
+
</pre>
+
HogeLogic.cs
+
<pre>
+
public class HogeLogic : ILogic
+
{
+
    public bool Exec()
+
    {
+
        Debug.Log("HogeLogc Exec");
+
        return true;
+
    }
+
}
+
</pre>
+
CarView.cs
+
<pre>
+
using UnityEngine;
+
using Zenject;
+
public class CarView : MonoBehaviour
+
{
+
    [Inject] ILogic _logic;
+
    void Start()
+
    {
+
        if (_logic != null)
+
        {
+
            _logic.Exec();
+
        }
+
    }
+
}
+
</pre>
+
 
+
HogeLogicInstaller.cs
+
<pre>
+
using Zenject;
+
public class HogeLogicInstaller : MonoInstaller
+
{
+
    public override void InstallBindings()
+
    {
+
        Container
+
            .Bind<ILogic>()
+
            .To<HogeLogic>()
+
            .AsCached();
+
    }
+
}
+
</pre>
+
 
+
#Scene選択
+
#Hierarchyに、Create EmptyでGameObjectを作り、CarViewの名前に変更し、CarView.csを、AddCompornentする。
+
#Hierarchyに、Create EmptyでGameObjectを作り、HogeLogicInstallerの名前に変更し、HogeLogicInstaller.csを、AddCompornentする。
+
#Hierarchyから右クリックし、Zenject/SceneContextを追加
+
#作成した、SceneContextを選択し、InspectorのMonoINstallersに、HogeLogicInstallerのGameObjectをドラッグする。
+
#実行するとCarのHogeLogicが実行できる
+
 
+
===installer<TDerived>エラー===
+
public class HogeLogicInstaller : Installer<HogeLogic>の部分で、
+
以下エラーが発生。
+
unity はジェネリック型またはメソッド installer<TDerived> 内で型パラメーター'TDerived として使用できません。
+
InstallBindingsメソッドを実行するクラスの継承元を : Installer<HogeLogic> などから MonoInstaller へ
+
 
+
参考:https://github.com/modesttree/Zenject
+
 
+
==AsSingleとAsCachedとAsTransient==
+
*AsSingle:インスタンスは一つで、シングルトンと同じ。
+
*AsCached:インスタンスを、キャッシュする。UnBindで破棄される。
+
*AsTransient:インスタンスは毎回作る。
+
 
+
===AsCachedについて===
+
<pre>
+
        Container
+
            .Bind<ILogic>()
+
            .To<HogeLogic>()
+
            .AsCached(); // キャッシュする
+
        Container
+
            .Unbind<HogeLogic>(); // キャッシュを削除
+
        Container
+
            .Bind<ILogic>()
+
            .To<HogeLogic>()
+
            .AsCached(); // キャッシュする
+
        Container
+
            .Resolve<HogeLogic>()
+
            .Exec(); // 実行
+
</pre>
+
キャッシュを削除して、再度Bindして実行
+
 
+
===インスタンスを入れる場合===
+
<pre>
+
        Container
+
            .Bind<ILogic>()
+
            .FromInstance(new HogeLogic())
+
            .AsSingle();
+
</pre>
+
 
+
参考:https://light11.hatenadiary.com/entry/2019/02/20/234834
+
==参考==
+
DIフレームワーク「Extenject(Zenject)」についてまとめました
+
https://www.theylive.co.jp/unitydi%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFextenjectzenject%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%BE%E3%81%A8/
+
 
+
依存性注入とは?と、なっているのでZenject(Extenject)を入門
+
https://qiita.com/4_mio_11/items/4306732bc47780802b74
+

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

Unity/DIフレームワーク/Extenject/基本

Unity/DIフレームワーク/Extenject/SceneLoader

Unity/DIフレームワーク/Extenject/Scene間共有

Unity/DIフレームワーク/Extenject/非MonoBehavior

Unity/DIフレームワーク/Extenject/ProjectContext