繁体   English   中英

Castle Windsor - 删除或更改已注册的实例

[英]Castle Windsor - Removing or changing a registered instance

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

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

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容器”等。

如果你不得不多次这样做,你可以考虑使用UsingFactoryMethodLifestyle.Transient注册IFoo ,所以每次你得到一个实例时它会使用最新的参数:

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

...


private IFoo GetLatestFoo()
{
    return new Foo(...)
}

您需要使用IHandlerSelector

请参阅此答案: https//stackoverflow.com/a/16832183/4593944

使用IsDefault注册新组件,它将成为首选的解析程序。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM