阅读并用谷歌搜索到了疲惫,我觉得我可能需要一些指导。
这可能部分是由于Castle Windsor 3.0的引入,但是大多数博客文章,SO问题和其他文档明确依赖于我所看到的现在已弃用的代码。
所以:问题?
在我的应用程序中,这是一个向MVC3应用程序提供后端代码的WCF服务,我有多个层,其中一个层为文件上载系统提供病毒扫描服务。
客户端要求支持多种扫描服务,我自然已经遵守,每个扫描服务都实现了IScanService接口,因此:
public interface IScanService
{
void Execute();
ScanResult GetResult();
}
所以在WCf服务中,构造函数可能如下所示:
public McAfeeFileScanService(IScanService mcAfeeScanService)
{
_scanService = scanService;
}
我如何专注于注入的IScanService是实现类型McAfeeScanService,还是NortonScanService或其他实现?
默认情况下,AFAIK Windsor将提供第一个注册的实施,无论是否为McAfeeScanService类型。
我正在研究ServiceOverrides,但是在Windsor 3.0中似乎已经弃用了DependsOn(Dependency.OnComponenent())[但我没有找到任何相关的例子]我也研究了Typed Factory Facilities,并进入IHandlerSelector,但觉得需要一些指导(看似常见且可能很简单)的任务。
谢谢大家。
答案 0 :(得分:7)
Windsor 3中不推荐使用ServiceOverride。您必须使用Dependency.OnComponent,如下所示:
Component.For<ISerializer>().ImplementedBy<JsonSerializer>().Named("jsonSerializer"),
Component.For<WebConnectionAcceptor, IChannelManager>().ImplementedBy<WebConnectionAcceptor>().Named("webAcceptor"),
Component.For<ConnectionAcceptorProxy>().Named("webProxy").DependsOn(
Dependency.OnComponent("connectionAcceptor", "webAcceptor"),
Dependency.OnComponent("serializer", "jsonSerializer"))
OnComponent中的第一个参数是绑定名称,第二个是组件名称。
答案 1 :(得分:2)
它认为这是你在寻找的东西:)
container.Register( Component.For()。ImplementedBy() .DependsOn(ServiceOverride.ForKey( “记录器”)。式( “secureLogger”)) );
此致
答案 2 :(得分:0)