我想知道温莎是否存在以下情况的模式。
基本上我有一个已注册的服务(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"
答案 0 :(得分:1)
我不确定我是否理解这个问题(也许你可以重写它,你不清楚你在追求什么),但如果我理解正确,你所追求的是能够使用不同的组件在特定情况下的特定服务。
如果情况确实如此,我认为IHandlerSelector
或子容器可能提供了实现这一目标的方法。