零基礎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
希望你看了之後有點收穫,程式碼程式下面附件提供