ASP.NET MVC 外掛化機制

發表於2015-04-02

概述

nopCommerce的外掛機制的核心是使用BuildManager.AddReferencedAssembly將使用Assembly.Load載入的外掛程式集新增到應用程式域的引用中。具 體實現可以參考nopCommerce解決方案中Nop.Core專案的Plugins目錄下的相關檔案。其中PluginManager.cs檔案是核 心檔案,包含了處理外掛化的核心程式碼。nopCommerce的註釋中感謝了其參考的Umbraco專案,並給出了主要參考文章的連結。
 
我們直接從nopCommerce3.5的實現中抽取必要的實現程式碼,製作一個簡易版的外掛系統Demo用於演示ASP.NET MVC的外掛化,核心只包含一個標記介面IPlugin,一個管理類PluginManager包含2個必要方法Initialize和ReStart。
 
架構
 
新建.NET解決方案SimplePlugin,新增2個類庫專案:SimplePlugin.PluginCore、 SimplePlugin.SimpleMvcPlugin和一個ASP.NET應用程式專案SimplePlugin.Web。 SimplePlugin.Web專案選擇Empty模板並選中MVC引用。設定專案之間的依賴關係和程式集引用:向 SimplePlugin.SimpleMvcPlugin新增SimplePlugin.PluginCore專案引用,向SimplePlugin.Web專案新增SimplePlugin.PluginCore專案引用。向SimplePlugin.PluginCore專案新增System.Web引用。
 
1.約定
(1)約定"~/Plugins"作為外掛根目錄。
(2)約定"~/Plugins/bin"作為中等信任級別下的執行時目錄。
外掛在執行時載入的是外掛程式集在執行時目錄的副本,不直接載入外掛而是載入執行時目錄中的副本的原因是避免外掛升級或刪除時dll檔案被鎖定。
2.基礎程式碼
 
向SimplePlugin.PluginCore專案新增如下檔案:
(1)IPlugin.cs:作為所有外掛的抽象介面。

(2)PluginManager:負責載入外掛和引用外掛。
(3)向Simple.Web專案新增Plugins目錄和Plugins/bin目錄。向Simple.Web專案新增Controllers/PluginController.cs
修改web.config,配置probing元素。指定trust level為中等信任級別下的外掛執行時目錄。
3.編寫外掛
 
通過Nuget向SimplePlugin.SimpleMvcPlugin專案新增MVC程式集引用,需要注意外掛的MVC版本與SimplePlugin.PluginCore引用的MVC版本的一致性。
(1)新增Controllers/SimpleMvcPlugin.cs實現介面IPlugin
(2)新增Controllers/SimplePluginMvcController.cs
(2)新增檢視Views/SimpleMvcPlugin/Index.cshtml
(3)複製SimplePlugin.Web專案中SimplePlugin.Web/Views/web.config檔案到當前專案的根目錄和Views目錄下。
(4)設定.cshtml以及.config檔案型別為內容,生成設定為較新則複製。
(5)設定SimplePlugin.SimpleMvcPlugin專案引用的程式集屬性複製到本地為False。
 
(6)設定SimplePlugin.SimpleMvcPlugin專案的生成路徑為bin\Debug\SimpleMvcPlugin\和bin\Release\SimpleMvcPlugin\

4.手動部署外掛
 
生成解決方案,訪問SimplePlugin.Web的外掛列表頁:
拷貝生成的SimpleMvcPlugin資料夾到SimplePlugin.Web專案的Plugins資料夾下,訪問SimplePlugin.Web的~/Plugin/Install訪問SimplePlugin.Web的外掛列表頁
訪問SimplePlugin.Web的~/SimpleMvcPlugin/Index頁
 
5.自動部署
設定設定SimplePlugin.SimpleMvcPlugin專案的生成路徑為:..\SimplePlugin.Web\Plugins\SimpleMvcPlugin\ 同時設定Debug和Release兩種配置。
重新生成解決方案,訪問SimplePlugin.Web的外掛列表頁以及~/SimpleMvcPlugin/Index頁:
 
6.測試中級信任級別
設定web.config的trust元素的level屬性為Medium,禁止訪問應用程式目錄以外的檔案。
重新生成解決方案,訪問SimplePlugin.Web的外掛列表頁以及~/SimpleMvcPlugin/Index頁。檢查Plugins/bin目錄:
 
7.測試檢視檔案修改
修改SimplePlugin.Web專案Plugins\SimpleMvcPlugin\Views\SimpleMvcPlugin目錄下的Index.cshtml。檢視修改結果:
 
8.Demo下載:點選下載
如果這篇部落格內容對您稍有幫助或略有借鑑,請您推薦它幫助更多的人。

相關文章