4

我想用在运行时创建的另一个实例来更改注册的实例。

这可以是删除现有组件并重新注册新组件,或者只是将新创建的实例重新分配给已注册的组件。

Foo old = new Foo("asd");
IoC.Register(Component.For<IFoo>().Instance(old));

Foo new = new Foo("qwe");
IoC.Unregister(old); // RemoveComponent method is removed from IKernel after v3.0
IoC.Register(Component.For<IFoo>().Instance(new));

有没有办法做到这一点?请不要提出其他想法,例如“重新初始化您的 IoC 容器”等。

4

3 回答 3

5

如果您必须多次执行此操作,则可以考虑IFoo使用UsingFactoryMethodand注册Lifestyle.Transient,因此每次获取实例时,它都会使用最新参数:

Component.For<IFoo>().UsingFactoryMethod(GetLatestFoo).Lifestyle.Transient

...


private IFoo GetLatestFoo()
{
    return new Foo(...)
}
于 2013-09-17T11:03:59.840 回答
2

看到这个答案: https ://stackoverflow.com/a/16832183/4593944

注册新组件,IsDefault它将成为首选解析器。

如果您已经有一个包含要重置的实例的容器,通常是单例,只需在容器上调用 Dispose。

于 2015-10-09T20:19:55.113 回答
1

您需要使用IHandlerSelector

于 2013-09-17T10:48:43.953 回答