MVC视图可以访问所有项目吗;t被视图所在的项目引用

本文关键字:项目 视图 引用 访问 MVC | 更新日期: 2023-09-27 18:30:01

好的,所以我对以下数据的情况有点困惑。

我们的应用程序中有以下结构:

  • Portal.Web-一个MVC 3 Web应用程序,它基本上包含所有视图、脚本、css和HTML助手扩展方法
  • Portal.Core-一个类库,基本上是我们的业务对象,我们的所有模型都包含在这个项目中
  • Portal.Data-另一个类库,包含我们的NHibernate配置和DTO类

以下是我们的用法:在控制器中,我们调用位于Portal.Core中的模型,它通过调用Portal.Data来填充,所以基本上Web永远看不到数据。

问题是:在控制器中,例如,我尝试实例化一个名为Client的新DTO对象,如下所示:

var client = new Client();

它不起作用,这是意料之中的,它不知道客户端是什么,即使指定使用也不会减少它。这很好。

但是如果我尝试在视图中执行完全相同的行,Resharper将使用添加到视图中,然后没有任何抱怨,项目运行,我们可以在视图中使用DTO类。

所以问题是,为什么会这样?我试图阻止我们的下级在视图中使用DTO类,所以我特意删除了对Web中Data项目的引用,但他们仍然可以使用这些类。有人能照亮吗?

MVC视图可以访问所有项目吗;t被视图所在的项目引用

我使用ASPX和Razor视图运行了相同的测试。在ASPX视图中引用Client失败,但在Razor视图中它们可以工作。当您请求应用程序时,视图是动态编译的,所以我查看了"C:''Windows''Microsoft.NET''Framework''v4.0.30119''Temporary ASP.NET Files''portal.web"中的一些文件夹,并且在编译视图时,从cmdline文件中显式添加了对程序集的引用。

编译剃刀视图的过程似乎添加了对bin文件夹中所有程序集的引用。然而,从ASP.NET MVC的来源来看,我无法证实这一点。

所以,我能得出的唯一结论是,这是使用Razor视图引擎的副作用。

也就是说,您可能需要扫描web.config,看看它是否使用assemblys元素包含。