Zenject

Project Context


Project全体のDIコンテナ、グローバルなストアを持ちたいときとか
本当は Scene Paranting を使うべき

using UnityEngine;
 
public interface IProjectDataSource {
    void SetGlobalValue(int value);
    
    int? GetGlobalValue();
}
     
public class ProjectDataSource: IProjectDataSource {
    private int? globalValue = 42;
 
    public void SetGlobalValue(int value) => globalValue = value;
    
    public int? GetGlobalValue() => globalValue;
}
using Zenject;
 
public class ProjectInstaller : MonoInstaller {
    public override void InstallBindings() {
        Container
            .Bind<IProjectDataSource>()
            .FromInstance(new ProjectDataSource())
            .AsSingle();
    }
}

Scene Parenting

SubContainer


動的に生成されるGameObjectに対してDIしたいときは
DIContainer.InstantiatePrefab()
はアンチパターン? で Factoryを使う?

Factory

Zenject Factoryの話 - imog

Zenject Memory Pool の情報が少なすぎる

UIWidgets + Zenject

Unity でも DI 使ったりしたいし画面もいい感じに作りたい「Zenject & UIWidgets」 その 2 - かずきのBlog@hatena


Zenject Memory Pool の情報が少なすぎる
-> Object Pool の代替