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

时间:2018-11-20 20:06:51

标签: unity3d zenject

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

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

我之前的设置应该是这样的:

order by  YEAR(orderDate) , WEEKOFYEAR(orderDate),DAYOFWEEK(orderDate) 

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

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

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

    return _Events;
}
  • 谢谢。

1 个答案:

答案 0 :(得分:0)

从那时起,我无可奉告,我将尽我所能完全回答。

如果您只想构造一个没有依赖性的对象,即(不需要自身注入),则:

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);
    }
}

如果您要创建一个也会注入游戏对象的游戏对象,则有几种方法可供选择,请查看 FromComponentXXX 方法,这些方法可让您使用预制参考或存储在参考资料中的预制文件夹,还有其他一些。