如何设置Zenject,当请求接口时,它会设置一个新的游戏对象,并返回一个新绑定的类实例



Zenject很棒,但我还没有找到一个合适的解决方案,用于实例化游戏对象

我有一个脚本,它为单行为事件提供了各种事件挂钩。Start、PostStart、Update、FixedUpdate等,因此非Unity控制器可以在某些事件中执行。它基于我命名为"IEventsController"的接口

我以前的设置是这样的:

private static IEventsController _Events;
public static IEventsController GetEvents()
{
if (_Events == null) 
{
var go = new GameObject("EventsController");
_Events = go.AddComponent<EventsController>();
}
return _Events;
}

我想弄清楚Zenject是否有一个内置的解决方案。我可以使用一个工厂或一个方法,但当Zenject可能已经处理它时,工厂有一个额外的类来管理它。使用一个方法来生成它仍然需要静态引用来检查它是否已经创建,而把它放在安装程序脚本中感觉是错误的。此外,还有FromComponent系列绑定可能对此有所帮助,但到目前为止我还没有看到。

我可能期待一个示例绑定方法调用:

Container.BindComponent<IEventsController>()
.To<EventsController>()
.ViaNewGameObject("Events Controller");
  • 谢谢

既然我不能评论要求详细说明,我会尽我所能完全回答。

如果你只是想构建一个没有依赖关系的对象,即(不需要对其本身进行注入(,那么:

Container.Bind<IEventsController>().FromMethod(...)

如果你想构建一个有依赖关系和需要注入的对象,那么创建一个Factory类:

Container.Bind<IEventsController>().FromFactory<EventsControllerFactory>()
class EventsControllerFactory : IFactory<IEventsController> {
[Inject]
public IDep1 dep1;
public IEventsController Create() {
return new EventsController(dep1);
}
}

如果您想创建一个也被注入的GameObject,您可以选择几个方法,请查看FromComponentXXX方法,这些方法允许您使用预制引用或存储在Resources文件夹中的预制,以及其他一些方法。

相关内容

最新更新