Castle windsor 温莎WCF设施和类型化工厂

Castle windsor 温莎WCF设施和类型化工厂,castle-windsor,wcffacility,typed-factory-facility,Castle Windsor,Wcffacility,Typed Factory Facility,我的问题与温莎提供的WCF和类型化工厂设施有关。我对国际奥委会的容器概念,特别是设施,还很陌生,但在评估了我们不久前写的一个项目后,我开始研究它。该程序是n层的,并且不是很容易进行单元测试,因为依赖注入并不是到处都能实现的。问题是,因为它是n层的,所以进行适当的DI最终会使顶层负责创建某个实例,该实例将被使用,比如5层以下;所以我求助于国际奥委会 然而,在阅读了许多文章和其他网站之后,我现在遇到了一些问题。最初的主要问题之一是将类与WCF服务的物理实现解耦,我的做法如下: service = M

我的问题与温莎提供的WCF和类型化工厂设施有关。我对国际奥委会的容器概念,特别是设施,还很陌生,但在评估了我们不久前写的一个项目后,我开始研究它。该程序是n层的,并且不是很容易进行单元测试,因为依赖注入并不是到处都能实现的。问题是,因为它是n层的,所以进行适当的DI最终会使顶层负责创建某个实例,该实例将被使用,比如5层以下;所以我求助于国际奥委会

然而,在阅读了许多文章和其他网站之后,我现在遇到了一些问题。最初的主要问题之一是将类与WCF服务的物理实现解耦,我的做法如下:

service = ManagerService.IoC.Resolve<IGridSubmitWorkService>(new { binding = new BasicHttpBinding(), remoteAddress = new EndpointAddress(WorkerAddress) });

result = service.SubmitWorkUnit(out errorString, aWorkUnit);
ManagerService.IoC.Release(service);
service=ManagerService.IoC.Resolve(新{binding=new BasicHttpBinding(),remoteAddress=new EndpointAddress(WorkerAddress)});
结果=service.SubmitWorkUnit(out errorString,aWorkUnit);
ManagerService.IoC.Release(服务);
<>但是,我发现了很多关于如何不使用<代码> IOC .ReffEnter()/Cux>的说明,应该使用工厂和WCF工具来消除对您的代码> IOC容器< /C>的依赖性,并且它是一种服务定位器模式,有些人认为它是反模式。 我的问题是:以上三行代码几乎解决了我所有的问题,但为了遵循正确的模式,我必须创建一个WCF工具,一个类型化工厂(它将为我提供使用此代码的类的实例)为工厂提供了一个新的接口,这感觉像是过度工程化,只是为了取悦一个模式而给代码增加了不必要的复杂性

问题1:我在这里缺少一些基本的东西吗

问题2:从代码中可以看出,我正在调用web服务的非空构造函数。如果我实现一个WCF设施,这还会像现在这样简单吗

问题3:我发现温莎维基上的解释非常简短,没有什么用处,你能给我指一个关于使用WCF设施的不错的教程吗


谢谢

Q1。是的,我认为我们错过了一些重要的事情。在您的三行示例中,您所做的只是将一个实现依赖项(您的GridSubmitWorksService)替换为另一个实现依赖项(ManagerService.IoC)。为了说明这一点,为什么不使用以下内容使其更简单

service = new GridSubmitWorkService(binding,remoteAddress);
result = service.SubmitWorkUnit();
这更简单,但它具有硬连线实现依赖性。关键是构造函数和属性注入允许您编写干净的组件,而不必了解管道是如何完成的。在您的代码和我的代码中,这一原则都被违反了——组件正在管理自己的管道,在大型应用程序中,这变得非常痛苦,非常迅速。这就是为什么ServiceLocator被许多人认为是一种反模式

你的服务定位器的名字本身就泄露了游戏。它被称为IoC——控制反转的缩写。但是,当您查看这两位代码的结构时,您可以清楚地看到,没有任何东西被反转——在这两种情况下,代码所做的事情几乎相同,但您的示例只是有点抽象和复杂

此外,没有一家国际奥委会组织试图强迫你坚持一种模式。如果你看不到好处,或者你的应用没有好处,那么请不要使用这种模式

Q2.任何合适的DI容器都基于构造函数注入。使用Windsor WCF工具非常简单,它支持多种托管方法,因此绑定和地址之类的事情无论如何都能得到正确处理

第三季度。除了温莎文档和维基之外,stackoverflow.com上还有大量信息,从论坛到问题应有尽有。如果有什么你无法解决的问题,我建议你提出一个具体的问题