【问题标题】:Castle Windsor 3.0, Services and Multiple ImplementationCastle Windsor 3.0、服务和多重实现
【发布时间】:2012-04-21 20:14:16
【问题描述】:

阅读和搜索到筋疲力尽的地步,我觉得我可能需要一些指导。

这可能部分是因为引入了 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()) [但我没有找到任何相关示例] 我还研究了类型化工厂设施,并进入 IHandlerSelector,但觉得这个(看似常见且可能很简单)任务需要一些指导。

谢谢大家。

【问题讨论】:

    标签: c#-4.0 castle-windsor


    【解决方案1】:

    ServiceOverride 在 Windsor 3 中已弃用。您必须像这样使用 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 中的第一个参数是绑定名称,第二个是组件名称。

    【讨论】:

    • 是的,这是我得出的结论,为回复喝彩。我会接受这个作为答案!
    【解决方案2】:

    看看温莎城堡维基上的第二个例子http://docs.castleproject.org/Default.aspx?Page=Inline-Dependencies&NS=Windsor&AspxAutoDetectCookieSupport=1

    它认为这就是你要找的东西:)

    container.Register( Component.For().ImplementedBy() .DependsOn(ServiceOverride.ForKey("Logger").Eq("secureLogger")) );

    问候

    【讨论】:

      【解决方案3】:

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多