【发布时间】:2012-07-04 06:12:07
【问题描述】:
我的问题与 Windsor 提供的 WCF 和类型化工厂设施有关。我对 IoC 容器概念,尤其是设施非常陌生,但在评估了我们不久前编写的一个项目后开始研究它。该程序是 n 层的,并且不是非常可单元测试的,因为依赖注入并不是在任何地方都实现的。问题在于,由于它是 n 层的,因此进行适当的 DI 最终会使顶层负责创建一个实例,该实例将被使用 5 层以下;所以我转向了 IoC。
但是,在阅读了许多 SO 文章和其他网站之后,我现在遇到了几个问题。最初的主要问题之一是将类与 WCF 服务的物理实现分离,我这样做如下:
service = ManagerService.IoC.Resolve<IGridSubmitWorkService>(new { binding = new BasicHttpBinding(), remoteAddress = new EndpointAddress(WorkerAddress) });
result = service.SubmitWorkUnit(out errorString, aWorkUnit);
ManagerService.IoC.Release(service);
但是,我发现多次提到你不应该使用IoC.Resolve<>(),而应该使用工厂和 WCF 设施来消除对IoC container 的依赖,并且它是一些人认为的服务定位器模式成为反模式。
我的问题是:上面的三行代码几乎解决了我的所有问题,但是为了遵循正确的模式,我必须创建一个 WCF 工具,一个类型化工厂(它将处理为我提供这个类的实例代码被使用)和工厂的新界面,这感觉就像过度设计和为代码添加不必要的复杂性只是为了取悦模式。
问题 1:我在这里缺少一些基本的东西吗?
问题 2: 从代码中可以看出,我正在为 Web 服务调用一个非空构造函数。如果我实现 WCF 工具,这仍然会那么简单吗?
问题 3:您能否指出一个关于使用 WCF 设施的体面的教程,因为我发现 Windsor wiki 上的解释非常简短且没有真正用处?
谢谢
【问题讨论】:
标签: castle-windsor wcffacility typed-factory-facility