Castle Windsor 3.0,服务和多重实施

时间:2012-04-21 20:14:17

标签: c#-4.0 castle-windsor

阅读并用谷歌搜索到了疲惫,我觉得我可能需要一些指导。

这可能部分是由于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,但觉得需要一些指导(看似常见且可能很简单)的任务。

谢谢大家。

3 个答案:

答案 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)

http://docs.castleproject.org/Default.aspx?Page=Inline-Dependencies&NS=Windsor&AspxAutoDetectCookieSupport=1

上查看温莎维基城堡的第二个例子

它认为这是你在寻找的东西:)

container.Register( Component.For()。ImplementedBy() .DependsOn(ServiceOverride.ForKey( “记录器”)。式( “secureLogger”)) );

此致

答案 2 :(得分:0)

我发布的内容非常类似。我有一个接口的两个实现,我希望MVC控制器使用我决定的其中一个实现。

article我解释了一种方法,但附带的源代码显示了另外两种方式。

希望这有帮助。