运行时重新绑定和重新注入实例

时间:2018-10-17 02:48:47

标签: unity3d zenject

我的问题是:我可以重新绑定一个实例,并在将其注入[Inject]属性的任何地方重新注入它吗?实例是这样绑定的:

:a_very_long_method_name

然后,当inst被更改时,我试图做:

[SerializeField] private MyClass inst;

public override InstallBindings()
{
    Container.BindInstance(inst);
}

但是它不起作用,并且像这样Container.BindInstance(inst); Container.QueueForInject(inst); 注入的每个MyClass类型的字段都与以前相同。 Mb我只是误解了这个概念。可能吗?

1 个答案:

答案 0 :(得分:1)

您可以这样使用rebind:

Container.Rebind<Foo>().FromInstance(foo)

或者:

Container.Unbind<Foo>();
Container.BindInstance(foo);

但是,这种事情被认为是不好的做法。正确使用依赖项注入时,绑定将仅在安装时添加一次,并且无需再次更改。这很重要,因为可能已经创建了对象,这些对象需要访问稍后对容器所做的更改。

如果类的实例在运行时发生更改,那么另一种方法可能是绑定一个包装活动实例的类,然后在其更改时触发事件。