unity3d - 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(...)
如果要构造一个具有依赖项和需要注入的对象,请创建一个工厂类:
Container.Bind<IEventsController>().FromFactory<EventsControllerFactory>()
class EventsControllerFactory : IFactory<IEventsController> {
[Inject]
public IDep1 dep1;
public IEventsController Create() {
return new EventsController(dep1);
}
}
如果你想创建一个同样被注入的游戏对象,你有几个方法可以让你选择,查看FromComponentXXX方法,这些方法可以让你使用预制件引用,或者存储在 Resources 文件夹中的预制件,以及其他一些方法。
推荐阅读
- mysql - 有没有办法从传递流的 NODE.js 以编程方式调用 MySQL 的 LOAD DATA INFILE?
- ios - 分段错误:11 - Xcode 10
- reactjs - Chartjs-2(React),不出现线条
- python-3.x - 尝试生成一个随机图,然后生成另一个,直到它与第一个同构
- java - 与 Bean 创建有关的 Spring Server 问题
- javascript - 有没有办法检测一个作用域插槽是否被传递给组件?
- html - HTML5 Canvas 设置设备像素比会影响性能
- r - 数据框的月日期过滤器?
- r - 在 R 中打开 .hdr .stx .prj 和 .flt
- javascript - 以编程方式单击 Google 幻灯片中的某个位置