ASP.NET:插件化機制

概述

nopCommerce的插件機制的核心是使用BuildManager.AddReferencedAssembly將使用Assembly.Load加載的插件程序集添加到應用程序域的引用中。具體實現能夠參考nopCommerce解決方案中Nop.Core項目的Plugins目錄下的相關文件。其中PluginManager.cs文件是核心文件,包含了處理插件化的核心代碼。nopCommerce的註釋中感謝了其參考的Umbraco項目,並給出了主要參考文章的連接。
 
咱們直接從nopCommerce3.5的實現中抽取必要的實現代碼,製做一個簡易版的插件系統Demo用於演示ASP.NET MVC的插件化,核心只包含一個標記接口IPlugin,一個管理類PluginManager包含2個必要方法InitializeReStart
 

架構

 
新建.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。查看修改結果:
 
相關文章
相關標籤/搜索