运行时重新绑定和重新注入实例
Runtime re-binding and re-injecting instances
我的问题是:我可以重新绑定一个实例并在我用 [Inject] 属性注入它的任何地方重新注入它吗?实例绑定如下:
[SerializeField] private MyClass inst;
public override InstallBindings()
{
Container.BindInstance(inst);
}
然后,当 inst 发生变化时,我尝试这样做:
Container.BindInstance(inst);
Container.QueueForInject(inst);
但是它没有用,像这样注入的每个类型为 MyClass 的字段 [Inject] private MyClass inst;
都和以前一样。 Mb我只是误解了这个概念。有可能吗?
您可以像这样使用重新绑定:
Container.Rebind<Foo>().FromInstance(foo)
或者:
Container.Unbind<Foo>();
Container.BindInstance(foo);
但是,这种事情被认为是不好的做法。正确使用依赖注入时,绑定只会在安装时添加一次,不需要再次更改。这很重要,因为可能已经创建了需要访问稍后对容器所做更改的对象。
如果 class 的实例在运行时发生变化,那么另一种方法可能是绑定一个 class 来包装活动实例,然后在它发生变化时触发事件。
我的问题是:我可以重新绑定一个实例并在我用 [Inject] 属性注入它的任何地方重新注入它吗?实例绑定如下:
[SerializeField] private MyClass inst;
public override InstallBindings()
{
Container.BindInstance(inst);
}
然后,当 inst 发生变化时,我尝试这样做:
Container.BindInstance(inst);
Container.QueueForInject(inst);
但是它没有用,像这样注入的每个类型为 MyClass 的字段 [Inject] private MyClass inst;
都和以前一样。 Mb我只是误解了这个概念。有可能吗?
您可以像这样使用重新绑定:
Container.Rebind<Foo>().FromInstance(foo)
或者:
Container.Unbind<Foo>();
Container.BindInstance(foo);
但是,这种事情被认为是不好的做法。正确使用依赖注入时,绑定只会在安装时添加一次,不需要再次更改。这很重要,因为可能已经创建了需要访问稍后对容器所做更改的对象。
如果 class 的实例在运行时发生变化,那么另一种方法可能是绑定一个 class 来包装活动实例,然后在它发生变化时触发事件。