城堡windsor服务覆盖覆盖默认值

时间:2011-07-08 09:00:12

标签: c# castle-windsor

我想知道温莎是否存在以下情况的模式。

基本上我有一个已注册的服务(DefaultService),并且有一个插件,我想用所有实例替换服务(DefaultService)和(PluginBasedService)。

我目前正在使用hack - Kernel.RemoveComponent(),然后重新添加我的基于插件的服务。这看起来很丑陋。对于这种情况,IHandleSelector似乎也很苛刻。

解决“上次注册”服务的Autofac方法对我也有用。

干杯, 克里斯

public class VM 
{
  public VM(IService)  
  {

  }
}

public interface IService {}

public class DefaultService : IService {} 
public class PluginBasedService : IService {}

Container.Register(
  Component.For<IService>().ImplementedBy<DefaultService>(), 
  Component.For<VM>()
  );

  // this is called in a dynamically loaded assembly, after the default service has been registered
Container.Register(
  Component.For<PluginBasedService>()
  .ServiceOverrides(ServiceOverride.ForKey<IService>.Eq<PluginBasedService>())
  );


Container.Resolve<IService>() // is DefaultService -> I want "PluginBasedService"

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题(也许你可以重写它,你不清楚你在追求什么),但如果我理解正确,你所追求的是能够使用不同的组件在特定情况下的特定服务。

如果情况确实如此,我认为IHandlerSelector或子容器可能提供了实现这一目标的方法。