我有一个 Unity + Zenject 设置,其中ProjectInstaller
包含一些遵循“模态”界面的全局依赖项,例如,
public class ProjectInstaller : MonoInstaller {
public override void InstallBindings() {
Container.Bind<ModalManager>().AsSingle();
Container.Bind<Modal>().To<DialogManager>().AsSingle();
}
}
有些模态只与某些场景相关,所以我将它们绑定在SceneInstaller
:
public class SceneInstaller : MonoInstaller {
public override void InstallBindings() {
Container.BindInterfacesAndSelfTo<InventoryManager>()
.FromComponentInNewPrefab(InventoryPrefab)
.AsSingle()
}
}
我想管理在项目范围内定义的单一的所有模式。ModalManager
所以它有一个List<Modal>
绑定:
public class ModalManager : MonoBehaviour {
[Inject]
protected List<Modal> _modals;
}
当我运行它时,ModalManager
只有一个模式:在项目范围内定义的模式。据我了解,SceneContext
它是ProjectContext
. 所以我应该能够在子场景中使用FromSubContainerResolve
绑定ProjectInstaller
项目,也许通过添加如下行:
// ProjectInstaller.cs
public override void InstallBindings() {
// ...
Container.Bind<Modal>().To<InventoryManager>().FromSubContainerResolve();
}
但我不确定这 11FromSubContainerResolve
种方法中的哪一种对这种情况有意义。它们似乎都与具有游戏对象上下文的预制件相关,而不是在ProjectContext
.
这个用例有意义吗?有没有更简单或更好的方法?