8

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

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

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

这是我们的用法:在控制器中,我们调用位于 Portal.Core 中的模型,该模型通过调用 Portal.Data 进行填充,因此基本上 Web 永远看不到数据。

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

var client = new Client();

它不起作用,预计它不知道 Client 是什么,甚至指定 using 也不会削减它。没关系。

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

那么问题来了,这是为什么呢?我试图阻止我们的小辈在 Views 中使用 DTO 类,所以我特意删除了对 Web 中 Data 项目的引用,但他们仍然可以使用这些类。有人可以阐明一下吗?

4

1 回答 1

2

我用 ASPX 和 Razor 视图运行了相同的测试。在 ASPX 视图中引用Client失败,但在 Razor 视图中它们可以工作。当您请求应用程序时,视图是即时编译的,因此我查看了“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\portal.web”中的一些文件夹和来自编译视图时显式添加对程序集的 cmdline 文件引用。

似乎编译剃刀视图的过程添加了对 bin 文件夹中所有程序集的引用。但是,查看 ASP.NET MVC 的源代码,我无法确认这一点。

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

也就是说,您可能需要扫描 web.config 以查看它是否包含在使用程序集元素中。

于 2012-04-06T07:58:45.013 回答