Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC4-在数据层中使用WCF_Asp.net Mvc_Wcf_Dependency Injection_Data Layers - Fatal编程技术网

Asp.net mvc MVC4-在数据层中使用WCF

Asp.net mvc MVC4-在数据层中使用WCF,asp.net-mvc,wcf,dependency-injection,data-layers,Asp.net Mvc,Wcf,Dependency Injection,Data Layers,在我的测试项目中,我创建了一个WCF服务并使其运行。 接下来,我创建了一个MVC4项目。它在一种溶液下被分解成几层 模型层 UI/视图/控制器层 存储库层 要进行快速测试,请执行以下操作: 在UI层,我向WCF服务添加了一个web引用。在控制器中,我通过“使用”在视图中填充下拉列表来联系WCF服务 然而,我正在用依赖注入驱动分离 在存储库层,我创建了一个带有“填充”下拉列表的接口,并将其注入。没问题 我正在与这个概念作斗争的是: 我是否在UI层中使用WCF服务,并在存储库层中引用它?(似乎不

在我的测试项目中,我创建了一个WCF服务并使其运行。 接下来,我创建了一个MVC4项目。它在一种溶液下被分解成几层

  • 模型层
  • UI/视图/控制器层
  • 存储库层
要进行快速测试,请执行以下操作: 在UI层,我向WCF服务添加了一个web引用。在控制器中,我通过“使用”在视图中填充下拉列表来联系WCF服务

然而,我正在用依赖注入驱动分离

在存储库层,我创建了一个带有“填充”下拉列表的接口,并将其注入。没问题

我正在与这个概念作斗争的是:

  • 我是否在UI层中使用WCF服务,并在存储库层中引用它?(似乎不对)
  • 我是否要创建另一个项目(数据层)并向WCF服务添加web引用,然后从存储库创建对数据层的引用
  • 这给我带来了另一个问题-如果我在单独的项目(层)中创建对WCF服务的web引用,则与WCF服务相关的信息不会出现在主config.sys文件中


    因此,我正在努力理解这一部分……还有什么我应该进一步阅读的吗?

    我觉得您将WCF调用视为一个数据源,这使它自然适合存储库层。存储库的工作是从其他层抽象数据源实现的知识


    我建议不要使用.NET项目强制执行层边界,而是使用同一项目中的文件夹强制执行逻辑分离,而不是物理分离。大多数用例不需要物理分离,它增加了复杂性,比如您提到的更困难的配置。

    意识到蛋糕可以用多种方式切割,我在这里向您介绍我对如何切割蛋糕的看法:

    问题#1:“我是否在UI层使用WCF服务并在存储库层引用它?” 第一步:正如史提芬在你的评论中所指出的,如果你想注入一个第三服务器层,你应该仔细考虑一下。用户界面层可以重命名为“托管在IIS中的层”。这样做使它成为MVC表示层的主机层和服务的主机层。 但是,这并不意味着您的服务是在这一层中实现的,只意味着它们是在这里托管的(这只是在web.config中引用接口和实现名称空间的问题)

    问题#2:“我是否创建另一个项目-数据层-并向WCF服务添加web引用,然后从存储库创建对数据层的引用?” 当我读到这篇文章时,您同时提出了多个问题:是的,您应该创建一个单独的层来封装存储库。不,您不应该让该层包含任何与wcf相关的内容。如果服务器层需要客户端访问wcf服务,则应将其划分为一个逻辑层,可以作为businesslogic层中的文件夹,也可以作为单独的物理“数据适配器层”。永远不要在您的存储库层中。虽然wcf数据适配器层在概念上与存储库层处于同一级别,但不应在同一逻辑或物理层中混合使用数据库访问和服务访问

    第三个问题我只能回答为一个问题:您希望WCF在您的体系结构中充分发挥作用的目的是什么?您是想注入一个独立的服务层,还是混淆了层分离和层分离

    层分离可以在进程中的运行时耦合,而层分离只能通过某种网络远程处理(如wcf)在运行时耦合

    正如Steven在评论中指出的,您根本没有真正记录在体系结构中使用wcf的必要性

    让我们从逻辑层和层的角度来看您的体系结构(切块):

    • 客户端访问层(#1,在浏览器上下文中运行)

    • Web主机层(#2,代表外部服务器层,包含所有MVC代码。可能模型存在于它自己的物理层中

    • 服务层(在您的体系结构中还不存在,因为没有必要将层进一步抽象为层)

    • 业务层(#2,表示位于表示层、数据库和数据访问层之间的业务逻辑)

    • 存储库层(#2,封装数据库访问逻辑和映射)

    • 服务访问层(#2,封装对外部服务的访问,可以在BL层或单独的物理层中实现为文件夹)

    • 数据库层(#3,sql server)

    因此,您正在询问如何使用IIS作为主机,C#作为实现语言在WCF中实现DI

    或者

    您是否要求提供构造n层.net应用程序的一般指导

    第一个很简单,因为有很多例子,比如

    第二个问题比较棘手,因为答案总是“视情况而定”。 这取决于你的需求是什么,你的专业水平是什么,你的项目的预计时间跨度是什么等等

    希望这对你有所帮助

    如果你愿意,我可以给你发送我的行为实现wcf unity的东西

    概念:

    • 逻辑层-用于隔离责任的架构概念。层具有向下耦合,而不是向上耦合

    • 物理层-用于强制逻辑分离的实现构造。可以将.net程序集用作物理层的实现

    • 层-可以存在于不承载其他层的计算机上的一个或多个层


    阅读《Microsoft体系结构指南》第二版。其pdf格式可从msdn免费下载。Sry无链接,从phon编写