2012-07-14 30 views
17

這是我想要實現的,我想將ASP.NET MVC的AREA作爲單純的DLL來分開。如何創建ASP.NET MVC區域作爲插件DLL?

  1. Blog.DLL
  2. Forums.DLL
  3. FAQ.DLL

他們每個人都是個體ASP.NET MVC區,擁有自己的默認CSHTML或ASPX頁面。安裝,遷移和維護大量頁面,包括資源,javascript等等,對於長期運行來說都是真正的痛苦。由於其中大部分將很難改變。

我的最終網站會是這樣的。

\MvcApplication 
    \bin 
     \MvcApplication.bin 
     \Blog.dll 
     \Forums.dll 
    \Controllers 
     \.. 
    \Models 
     \.. 
    \Views 
     \.. 
    \Global.asax 
    \Web.config 

沒有添加任何東西,只是刪除Blog.dll,我的應用程序應該支持/博客及其所有頁面。如果我想自定義的東西,比我可以添加區,和只添加CSHTML頁..

\MvcApplication 
    \bin 
     \MvcApplication.bin 
     \Blog.dll 
     \Forums.dll 
    \Areas 
     \Blog 
      \Views 
       \Shared 
        \BlogLayout.cshtml <-- this will override the look 
    \Controllers 
     \.. 
    \Models 
     \.. 
    \Views 
     \.. 
    \Global.asax 
    \Web.config 

這將重用ASP.NET區插件,通過簡單地丟棄在bin文件夾中的DLL幫助。然而,web.config可能需要一些更改,但很可能我們會將配置值保存在數據庫中,並且只需要web.config中的「實體框架連接字符串」。

我的挑戰(問題)

  1. 這可能嗎?它確實在我看來,但會有任何反射/許可問題?
  2. 如何在一個DLL中包含cshtml/aspx視圖?可能編譯版本?我已經在codeplex上看到了一些基於文本模板的視圖引擎,但是我對如何實際使用它們感到困惑。
  3. 如何讓ViewEngine首先檢查物理目錄文件是否存在,然後查看dll本身中的cshtml/aspx作爲資源文件?

回答

9

您可以查看following article,它說明了如何使用自定義VirtualPathProvider來檢索作爲資源嵌入到單獨程序集中的Razor視圖。

+0

aspx文件怎麼樣?大多數情況下我們只使用cshtml,但是對於打印PDF,cshtml不能用於未知的html標籤,所以我們有時使用aspx。 – 2012-07-14 10:54:38

+1

我不知道ASPX。我停止使用它已經很長時間了。也許虛擬路徑提供者可能會被改編。 – 2012-07-14 11:17:37

+0

您可以使用可直接從Nuget安裝的EmbeddedResourceVirtualPathProvider。它適用於資產文件。 https://github.com/mcintyre321/EmbeddedResourceVirtualPathProvider#readme – mcintyre321 2013-04-06 16:10:22

1

MvcCodeRouting支持你想要什麼,以及許多其他有趣的東西。查看有關ASP.NET MVC插件的this post