我一直在研究依赖注入和服务定位器(以及两者之间的比较)。我绝对可以看到依赖注入的好处,特别是在测试驱动开发方面。虽然我们目前没有实践测试驱动开发,但我希望在我的开发团队中开始实施。但是,要求几乎所有数据库调用都必须通过Web服务。对于新的开发项目,我们更常使用WCF服务而不是传统的Web服务。我正在努力理解的是将Dataprovider依赖项注入我们的Web服务的想法。
对我来说,客户端必须告诉服务从哪里提取数据是没有意义的。让WCF服务与Dataprovider紧密结合是“可接受的”吗?这似乎打破了没有外部依赖性的单元测试的基本思想。我很感激任何有关此事的反馈。
答案 0 :(得分:1)
根据场景的复杂程度,您可能希望为WCF服务应用程序构建一个解耦层,这就是使用Inversion of Control可能有意义的地方。
客户显然不应该知道,更不用说告诉服务,使用什么数据提供者。 WCF服务的工作就是决定这一点。您可以在WCF类构造函数中使用服务定位器,也可以使用IInstanceProvider或ServiceHostFactory注入所需的服务。
由此决定您的WCF应用程序使用的服务。
一个常见的解决方案是使用Repository pattern抽象数据持久性,这在您的WCF服务包含任何重要业务逻辑时尤其有用。在这种类型的场景中,您将构建执行所有数据提供程序特定逻辑的存储库类。然后我可以模拟或存根这些类,以便对服务进行单元测试。
在其他情况下,尤其是当您的WCF服务在很少或没有业务逻辑的情况下公开CRUD操作时,我发现在服务端点和数据库之间构建一个额外的层是没有意义的。最终,在某些时候,某些部分程序需要了解数据库。使用DI / SL / IoC不应该成为它自己的目标。
答案 1 :(得分:0)
客户端不会指示数据来自何处。所有依赖注入都将在服务器上进行。