Mer*_*aya 5 c# castle-windsor ioc-container inversion-of-control
我想用运行时创建的另一个实例更改注册的实例。
这可以删除现有组件并重新注册新组件,或者只是将新创建的实例重新分配给已注册的组件。
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));
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?请不要提出其他想法,例如“重新初始化您的 IoC 容器”等。
如果您必须多次执行此操作,您可以考虑使用 和 进行注册IFoo,UsingFactoryMethod因此Lifestyle.Transient每次您获取实例时,它都会使用最新的参数:
Component.For<IFoo>().UsingFactoryMethod(GetLatestFoo).Lifestyle.Transient
...
private IFoo GetLatestFoo()
{
return new Foo(...)
}
Run Code Online (Sandbox Code Playgroud)