好的,所以我对以下数据发生了什么感到困惑。
我们的申请中有以下结构:
这是我们的用法:在控制器中,我们调用位于Portal.Core中的模型,该模型通过调用Portal.Data进行填充,因此Web基本上看不到数据。
这里有一个问题:在控制器中,比方说,我试着像实例一样实例化一个名为Client的新DTO对象:
var client = new Client();
它不起作用,预计它不知道客户端是什么,甚至指定使用不会削减它。没关系。
但是如果我尝试在视图中完全相同的行,Resharper将使用添加到视图中,然后没有投诉,项目运行,我们可以在视图中使用DTO类。 / p>
所以问题是,这是为什么?我试图阻止我们的青少年在Views中使用DTO类,所以我故意删除了对Web中的Data项目的引用,但他们仍然可以使用这些类。有人可以解释一下吗?
答案 0 :(得分: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 View引擎的副作用。
也就是说,您可能希望扫描web.config以查看它是否包含在assemblies element中。