Castle Windsor服务覆盖默认值
本文关键字:默认值 覆盖 服务 Windsor Castle | 更新日期: 2023-09-27 18:01:36
我想知道温莎是否有以下场景的模式。
基本上我有一个注册的服务(DefaultService),并有一个插件,我想用(PluginBasedService)替换所有实例的服务(DefaultService)。
我目前正在使用hack - Kernel.RemoveComponent(),然后重新添加我的基于插件的服务。这看起来很老套。对于这个场景,IHandleSelector似乎也很粗糙。
Autofac解决"Last Registered"服务的方法也适用于我。
欢呼,克里斯。
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"
我不确定我理解这个问题(也许你可以重写它,它不是很清楚你所追求的),但如果我理解正确,你所追求的是能够在特定上下文中为给定的服务使用不同的组件。
如果确实是这样的话,我认为IHandlerSelector
或子容器可能提供一种实现这一目标的方法。