我有一系列预制件,我希望能够实例化通过Zenject Factory随机挑选的预制件,并在其子容器中执行其绑定。
我要执行的操作与Zenject文档中的此代码示例相同,但适用于随机选择的预制件。 https://github.com/modesttree/Zenject/blob/master/Documentation/SubContainers.md#using-game-object-contexts-no-monobehaviours
using UnityEngine;
using Zenject;
public class GameInstaller : MonoInstaller
{
[SerializeField]
GameObject ShipPrefab;
public override void InstallBindings()
{
Container.BindInterfacesTo<GameRunner>().AsSingle();
Container.BindFactory<float,ShipFacade,ShipFacade.Factory>()
.FromSubContainerResolve().ByNewPrefabInstaller<ShipInstaller>(ShipPrefab);
}
}
我能够部分使其与
一起使用[SerializeField] private GameObject[] ships;
...
Container.BindFactory<float,ShipFacade.Factory>()
.FromSubContainerResolve().ByNewGameObjectMethod(SpawnShip);
...
private void SpawnShip(DiContainer container,float speed)
{
container.Bind<ShipFacade>().AsSingle();
container.Bind<Transform>().FromComponentOnRoot();
var shipPrefab = ships[Random.Range(0,ships.Length)];
var ship = container.InstantiatePrefab(shipPrefab);
container.Bind<ShipHealthHandler>().FromNewComponentOn(ship).WhenInjectedInto<ShipFacade>();
container.BindInstance(speed).WhenInjectedInto<ShipInputHandler>();
}
但是这很尴尬,在这种情况下,我想我没有利用子容器的优势。预制件也会在一个空的GameObject中生成。 我想要实现的是能够使用ShipInstaller进行子容器绑定。