我在我的游戏中使用 Zenject 进行依赖注入,我陷入了僵局。
让我描述一下我当前的设置:
我有几个自己的角色,GameObjectContext
负责CharacterInstaller
将 aCharacterController
注入到CharacterPresenter
.
public class CharacterInstaller : MonoInstaller<CharacterInstaller>
{
public override void InstallBindings()
{
Container.BindInterfacesAndSelfTo<CharacterInstaller>().AsSingle().NonLazy();
}
}
// PLAIN C# class
public class CharacterController : <some_interfaces>
{
public void Foo()
{
// ...
}
}
public class CharacterPresenter : MonoBehaviour
{
private CharacterController characterController;
[Inject]
public void InjectDependencies( CharacterController characterController )
{
this.characterController = characterController;
}
public void Foo() => characterController.Foo();
}
我想做的是将CharacterController
类的所有实例也注入到使用List Bindings的“管理器”类中。这位经理不是我角色的父母,我可能需要几个经理。
public class CharactersManager
{
private List<Character> characters;
public CharactersManager( List<Character> characters)
{
this.characters = characters;
}
public void MakeCharactersDoSomething()
{
foreach ( Character character in characters)
character.Foo();
}
}
我发现解决我的问题的更接近的事情是:
• 将ZenjectBinding
组件附加到我的角色并指定我需要的上下文。
→ 不能工作,因为CharacterController
它是一个普通的 C# 类并且ZenjectBinding
唯一绑定组件
Context
•在CharacterInstaller
and 调用中声明 a OtherContext.Container.Bind...
→ 失败,因为OtherContext.Container
为空
• 调用Container.Bind<CharacterController>().FromComponentsInHierarchy()
我的经理安装程序
→ 不工作,因为CharacterController
不是组件
• 使用工厂
→ 我不能使用它,因为我的对象是在编辑时放置在编辑器中的
•Container.ParentContainers
在我中使用CharacterInstaller
→ 无法使用,因为我的经理不是我的父容器CharacterInstaller.Container
我愿意接受建议,如果需要,可能会重构我的设置。提前致谢