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

Unity3d 运行时重新绑定和重新注入实例,unity3d,zenject,Unity3d,Zenject,我的问题是:我是否可以重新绑定一个实例,并在使用[inject]属性注入的任何地方重新注入它。实例绑定如下: [SerializeField] private MyClass inst; public override InstallBindings() { Container.BindInstance(inst); } 然后,当inst发生变化时,我尝试: Container.BindInstance(inst); Container.QueueForInject(inst);

我的问题是:我是否可以重新绑定一个实例,并在使用[inject]属性注入的任何地方重新注入它。实例绑定如下:

[SerializeField] private MyClass inst;

public override InstallBindings()
{
    Container.BindInstance(inst);
}
然后,当inst发生变化时,我尝试:

Container.BindInstance(inst);
Container.QueueForInject(inst);

但是它不起作用,每个类型为MyClass的字段都是这样注入的
[Inject]private MyClass inst与之前相同。我只是误解了这个概念。有可能吗?

您可以像这样使用重新绑定:

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

Container.Unbind();
Container.BindInstance(foo);
然而,这种事情被认为是不好的做法。正确使用依赖项注入时,绑定在安装时只添加一次,无需再次更改。这一点很重要,因为可能已经创建了需要访问稍后对容器所做更改的对象

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

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