从业务逻辑层使用WCF服务

时间:2018-02-22 09:39:04

标签: c# unit-testing wcf dependency-injection .net-core

我有一个具有以下结构的解决方案:

  1. 域(.NET 4.6.1)
  2. DAL(.NET 4.6.1)
  3. BLL(.NET Core 2.0)
  4. API(.NET Core 2.0)
  5. 我需要将数据提交到外部WCF服务。我个人对WCF没有太多经验,因为我一直在使用REST API。因此,为了尝试使用WCF服务,我在其中设置了一个.NET核心控制台应用程序,并为其添加了一个连接的服务引用。这导致生成Reference.cs具有以下类:

    • IWebService
    • IWebServiceChannel
    • SendResponse
    • 的GetResponse
    • WebServiceClient(实现IWebService)

    我正在考虑在BLL层创建一个SubmissionService类来向WCF服务提交数据,因此我将IWebService从控制台应用程序移动到BLL层以注入到类中并执行单元测试。在IWebService上定义的属性需要引用System.ServiceModel,这带来了很多包袱,在我的BLL图层中引用它是没有意义的。

    我不确定将WCF客户端放在我的项目结构中的哪个位置。我一直在研究这个问题,我能想到的唯一可行的解​​决方案是创建一个纯粹用于WCF客户端的类库项目,并在我的BLL层中引用它来访问IWebService并模拟它进行测试。有没有人遇到过同样的情况?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您缺少一个'图层',即Composition Root。 (有关更详细的说明,请参阅section 4.1this book)。

您可以定义自己的特定于应用程序的抽象,允许BLL与WCF服务(通过该抽象)进行通信。该抽象可以位于BLL中。

在Composition Root中,您可以在使用WCF客户端调用WCF服务的特定于应用程序的抽象之上创建适配器,该客户端也可以在Composition Root中生成。