我有一个具有以下结构的解决方案:
我需要将数据提交到外部WCF服务。我个人对WCF没有太多经验,因为我一直在使用REST API。因此,为了尝试使用WCF服务,我在其中设置了一个.NET核心控制台应用程序,并为其添加了一个连接的服务引用。这导致生成Reference.cs
具有以下类:
我正在考虑在BLL层创建一个SubmissionService
类来向WCF服务提交数据,因此我将IWebService
从控制台应用程序移动到BLL层以注入到类中并执行单元测试。在IWebService
上定义的属性需要引用System.ServiceModel
,这带来了很多包袱,在我的BLL图层中引用它是没有意义的。
我不确定将WCF客户端放在我的项目结构中的哪个位置。我一直在研究这个问题,我能想到的唯一可行的解决方案是创建一个纯粹用于WCF客户端的类库项目,并在我的BLL层中引用它来访问IWebService并模拟它进行测试。有没有人遇到过同样的情况?非常感谢任何帮助。
答案 0 :(得分:2)
您缺少一个'图层',即Composition Root。 (有关更详细的说明,请参阅section 4.1的this book)。
您可以定义自己的特定于应用程序的抽象,允许BLL与WCF服务(通过该抽象)进行通信。该抽象可以位于BLL中。
在Composition Root中,您可以在使用WCF客户端调用WCF服务的特定于应用程序的抽象之上创建适配器,该客户端也可以在Composition Root中生成。