我的问题与温莎提供的 WCF 和类型化工厂设施有关。我对 IoC 容器概念,尤其是设施非常陌生,但在评估了我们不久前写的一个项目后开始研究它。该程序是 n 层的并且不是非常可单元测试的,因为依赖注入并不是到处都实现的。问题在于,由于它是 n 层的,因此进行适当的 DI 最终会使顶层负责创建一个实例,该实例将被使用 5 层以下;所以我转向国际奥委会。
但是,在阅读了许多 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:由于我发现 Windsor wiki 上的解释非常简短而且没有真正用处,您能否指出一个关于使用 WCF 设施的体面教程?
谢谢