天天看點

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  在日常開發中, 我們經常談起子產品化/插件化架構,這樣可既可以提高開效率,又可以實作良好的擴充性,尤其對于産品化的系統有更好的實用性。

  我們采用的是MVC5(本文中介紹的方法對于MVC4也是适用的),如下圖,解決方案中有四個項目,其中 WeDiscuss 為前端,WeDiscuss.Plugin.Framework 為插件公共類庫  WeDiscuss.Plugin.Album 為插件(相冊) WeDiscuss.Plugin.News 為插件(新聞),本文隻是講解決插件的實作方式,就不多做其它如果業務邏輯、資料通路層等

  注;每個插件都有自已的(M、V、C),内部實作和常用MVC沒有差別,這樣可以友善的開發,沒有其它新知識的引入。

  

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  其中,插件層可以在主項目中引用,也可以不引用,或是放到其它目錄下(如把插件DLL單獨放到“Plugins”目錄中),如果不引用就采用在編譯完成時複制

  在如下圖加入:

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  我們把各個子產品編譯出來的assembly和各個子產品的配置檔案自動放到一個bin平級的plugin目錄,然後web應用啟動的時候自動掃描這個plugin目錄并加載各個子產品plugin,這個怎麼做到的?大家也許知道,ASP.NET隻允許讀取Bin目錄下的assbmely,不可以讀取其他路徑,包括Bin\abc等,即使在web.config這樣配置probing也不行:(不信你可以試一下)

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳
轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  插件能用了,但也想動态注入菜單,這樣才實作了自動化,要不還是人工進行菜單注入永遠是半自動化,這和我們開發的思想是不想符的,下面就來說一下菜單的注入

  1、首稱在WeDiscuss.Plugin.Framework 為插件公共類庫中建實體類PluginMenu 和PluginMenus

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳
轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  這樣我們就實作了菜單的結構,接下來就是采單的生成或注入方法:

  建立 AppPlugin 和 PluginApplication來實作菜單的初使化方法,并将生成好的菜單存放在靜态變量中。

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳
轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  2、菜單初使化

  在每個插件項目中建立一類,并繼承AppPlugin,重寫方法:SetupExtensions 調用DefineMenuItem 實作菜單初使化,在菜單的結果中我們看到有MenuType類型,這裡我們自定義,一般會用枚舉來實作,可以定義為前台或背景等,一個插件可以擁有多個菜單,可以注入多個地方

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳
轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  3、菜單調用

    在需要出現插件菜單的地方,我們用以下方法實作菜單的注入并呈現

轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳
轉發-基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作基于ASP.NET MVC 4/5 Razor的子產品化/插件式架構實作概述架構 小結源碼下載下傳

  我們站在前輩的肩膀上成長,感謝所有幫助WD成長的人.

繼續閱讀