Castle-Windsor:将来覆盖一个组件

时间:2010-03-04 16:20:14

标签: .net castle-windsor

我有以下用例:

我想注册应用程序的所有配置之间共享的所有组件。然后我想注册一系列动态配置的“插件”,它们表示为IRegistration的自定义实现。

只有这样才能解决我的应用程序起点。

我希望插件做的一件事就是覆盖服务实现。像这样:

public class SomePlugin {
  public void Register(IKernel kernel) {
    kernel.RemoveComponent(typeof(DefaultServiceImplementation).FullName);
    kernel.Register(
            Component.For<IService>()
              .ImplementedBy<AlternateServiceImplementation>())
  }
}

但是,如果已注册的任何组件都依赖于IService,则无效。

我知道我可以先注册插件,但由于其他几个原因,这是有限制的。我怎样才能满足我的具体要求?

我能想到的最好的事情就像是

kernel.ResolvingComponent += (model, a, b) => {
  if(model.Service == typeof(IService))
    model.Implementation = typeof(AlternateServiceImplementation);
}

我认为这可以在一些有限的情况下起作用,但它远非理想。

1 个答案:

答案 0 :(得分:3)

乔治,

我相信你所寻找的是IHandlerSelector

相关问题