零基礎ASP.NET Core MVC插件式開發
一個項目隨着業務模塊的不斷增加,系統會越來越龐大。如果參與開發的人員越多,管理起來難度也很大。面對這樣的情況,首先想到的是模塊化插件式開發,根據業務模塊,拆分成各個獨立的插件,然后分配不同開發人員開發,互相之間沒有依賴完全獨立。
這里介紹一種使用ASP.NET Core MVC 技術開發Web后台系統,使用插件式的方案。這個方案在項目中已經使用效果覺得還不錯,這里把主要思想提取出來,做個簡單的demo分享下
一、創建主項目
這里使用的開發工具是vs2019,ASP.NET Core 2.1。
創建一個ASP.NET Core MVC項目,項目結構如下圖1,完全是腳手架自動創建好的標准項目
圖1
這里是一個簡單的默認程序,在實際的項目中,特別是傳統信息管理web后台系統,登錄,以及登錄之后的主框架,還有一些公共的模塊,可以在主項目里面做,不會隨業務而變動的。然后各個具體業務模塊分成獨立的插件開發。
這個主項目建立好之后,運行正常,如圖2
圖2
下面開始做代碼部分添加,為了方便閱讀代碼以截圖提供,最后會附加完整的demo程序提供下載。
1、在Startup.cs類里面增加如下代碼圖3,具體作用看注釋,這里就不再贅述。
圖3
這里是把插件程序注冊到主程序里面,核心就是使用了ApplicationParts
2、Startup.cs類里面還有一個地方要修改,增加一個Areas區域的路由映射,圖4
圖4
增加這個的具體原因等會看插件項目的說明
3、還有為了演示能否訪問到插件,這里增加兩個插件的超鏈接,具體到業務中,菜單肯定是數據庫動態維護的。
修改Views/Shared/_Layout.cshtml代碼如下 圖5
圖5
二、創建插件項目
插件項目也是一個標准的ASP.NET Core MVC 項目。我這里為了演示,創建了兩個獨立的插件項目。如下圖6,圖7
圖6
圖7
插件項目說明,插件是根據業務模塊划分的,還有為了防止注冊到主項目之后路由命名的沖突,插件項目就使用MVC自帶的區塊Areas功能來存放。這里就是前面主項目要增加Areas路由映射的原因。然后刪除腳手架默認創建的外層控制器和視圖文件,因為主項目也有這樣同名的控制器路由,這些不刪除,到時候注冊到主項目,會出現重復路由錯誤。
插件項目增加各自的Areas,新建控制器如圖8,新建對應試圖如圖9。這里就添加幾個模擬數據。
圖8
圖9
到這里,把插件項目發布出來的xxx.dll和xxx.Views.dll,放到主項目里面去就可以運行了。
但是作為插件開發者,每次需要把文件發布放到主項目去才能運行,對開發調試都是不方便,因為插件開發者可能就沒有主項目的權限,主項目是統一管理的。分配一個插件還每次都附帶一個主項目也比較繁瑣。
想到這里就可以反過來把主程序dll注冊到插件項目里面,這樣就可以在插件項目里面vs直接運行調試起來。
以插件1為例,Startup.cs類里面增加如下代碼,圖10
圖10
這樣把主程序的dll提供,比如這個演示demo主程序就需要這兩個(Agile.WebPlatform.Main.dll與Agile.WebPlatform.Main.Views.dll)把他們放到插件項目的運行目錄。vs直接運行插件項目,就可以正常啟動了。各種開發調試完全不受其他影響。
插件里面直接啟動調試圖11
圖11
運行效果如下 圖12
圖12
點擊插件1 顯示如下圖13
圖13
注意!這里雖然可以看到插件2,但點擊插件2是會提示找不到路由的,只能調試各自插件的內容。
開發調試其他插件類似,提供主項目的dll,各個插件項目完全可以獨立開發自己的業務模塊,然后運行調試。
三、發布
最后,只要把插件項目的發布文件放到主項目的發布文件里面,使用主項目來運行,整個系統所有的插件都能正常使用了。這樣就做到了開發調試獨立,最后交付插件自己的dll,放到主項目的發布里面就可以了。
如下圖14,是最后發布的程序
圖14
使用命令運行主項目,或者宿主到iis也一樣,如圖15,命令行運行
圖15
瀏覽器打開訪問,如圖16
圖16
點擊插件1,顯示如圖17
圖17
點擊插件2,顯示如圖18
圖18
希望你看了之后有點收獲,代碼程序下面附件提供