簡體   English   中英

MVC 視圖是否可以訪問所有項目,即使它們未被視圖所在的項目引用?

[英]Can MVC Views access all projects even though they aren't referenced by the project where the views are?

好的,所以我對以下數據發生了什么感到有點困惑。

我們的應用程序中有以下結構:

  • Portal.Web - 一個 MVC 3 Web 應用程序,基本上包含所有視圖、腳本、css 和 HTML 輔助擴展方法
  • Portal.Core - 一個 Class 庫,基本上是我們的業務對象,我們的所有模型都包含在這個項目中。
  • Portal.Data - 另一個 Class 庫,其中包含我們的 NHibernate 配置和我們的 DTO 類。

這是我們的用法:在 controller 中,我們調用位於 Portal.Core 中的 model,它通過調用 Portal.Data 進行填充,因此基本上 Web 永遠看不到數據。

關鍵在於:在 controller 中,例如我嘗試實例化一個名為 Client 的新 DTO object,如下所示:

var client = new Client();

它不會工作,這是預期的,它不知道 Client 是什么,甚至指定一個 using 也不會削減它。 沒關系。

但是,如果我嘗試在視圖中執行完全相同的行,Resharper 會將 using 添加到視圖中,然后沒有投訴,項目運行,我們可以在我們的視圖中使用 DTO 類。

那么問題來了,這是為什么呢? 我試圖阻止我們的后輩在視圖中使用 DTO 類,所以我特意刪除了對 Web 中數據項目的引用,但他們仍然可以使用這些類。 有人可以闡明一下嗎?

我用 ASPX 和 Razor 視圖運行了相同的測試。 在 ASPX 視圖中引用Client失敗,但在 Razor 視圖中它們有效。 當您請求應用程序時,這些視圖是即時編譯的,所以我查看了“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\portal.web”中的一些文件夾和 cmdline 文件編譯視圖時顯式添加對程序集的引用。

似乎編譯 razor 視圖的過程添加了對 bin 文件夾中所有程序集的引用。 但是,查看 ASP.NET MVC 的源代碼,我無法確認這一點。

所以,我能得出的唯一結論是,這是使用 Razor 視圖引擎的副作用。

也就是說,您可能想要掃描 web.config 以查看它是否包含在使用assemblys 元素中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM