I have a Unity + Zenject setup with a ProjectInstaller
with some global dependencies that adhere to a "modal" interface, e.g.,
public class ProjectInstaller : MonoInstaller {
public override void InstallBindings() {
Container.Bind<ModalManager>().AsSingle();
Container.Bind<Modal>().To<DialogManager>().AsSingle();
}
}
Some modals are only relevant to certain scenes, so I bind those in the SceneInstaller
:
public class SceneInstaller : MonoInstaller {
public override void InstallBindings() {
Container.BindInterfacesAndSelfTo<InventoryManager>()
.FromComponentInNewPrefab(InventoryPrefab)
.AsSingle()
}
}
I want to manage all modals from the single ModalManager
, defined at the project scope. So it has a List<Modal>
binding:
public class ModalManager : MonoBehaviour {
[Inject]
protected List<Modal> _modals;
}
When I run this, the ModalManager
only gets a single modal: the one defined in the project scope. In my understanding the SceneContext
is a subcontainer of the ProjectContext
. So I should be able to use FromSubContainerResolve
in the ProjectInstaller
to bind items in the child scene, perhaps by adding a line like:
// ProjectInstaller.cs
public override void InstallBindings() {
// ...
Container.Bind<Modal>().To<InventoryManager>().FromSubContainerResolve();
}
But I'm not sure which of the eleventy FromSubContainerResolve
methods make sense for this case. They all seem pertinent to prefabs with a game object context, not for use from within the ProjectContext
.
Does this use case make sense? Is there an easier or better way?