gpt4 book ai didi

c#-4.0 - CaSTLe Windsor 3.0、服务和多重实现

转载 作者:行者123 更新时间:2023-12-04 17:38:35 35 4
gpt4 key购买 nike

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

这可能部分是因为 CaSTLe Windsor 3.0 的引入,但是大多数博客文章、SO 问题和其他文档都明确依赖于我所看到的现在已弃用的代码。

所以:问题?

在我的应用程序中,这是一个为 MVC3 应用程序提供后端代码的 WCF 服务,我有多个层,其中一个为文件上传系统提供病毒扫描服务。

客户要求支持多个扫描服务,我自然答应了,每个扫描服务都实现了一个 IScanService 接口(interface),因此:

public interface IScanService
{
void Execute();
ScanResult GetResult();
}

因此,在 WCf 服务中,构造函数可能如下所示:
public McAfeeFileScanService(IScanService mcAfeeScanService)
{
_scanService = scanService;
}

如何确定注入(inject)的 IScanService 是 McAfeeScanService 或 NortonScanService 或其他实现类型的实现?

默认情况下,AFAIK Windsor 将提供第一个注册的实现,无论它是否属于 McAfeeScanService 类型。

我正在研究 ServiceOverrides,但似乎在 Windsor 3.0 中已弃用,取而代之的是 DependsOn(Dependency.OnComponenent()) [但我没有找到任何相关示例] 我还研究了类型化工厂设施和 IHandlerSelector ,但觉得这个(看似常见且可能很简单)任务需要一些指导。

谢谢大家。

最佳答案

在 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 中的第一个参数是绑定(bind)名称,第二个是组件名称。

关于c#-4.0 - CaSTLe Windsor 3.0、服务和多重实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262603/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com