零基礎ASP.NET Core MVC外掛式開發

sylla發表於2019-07-13

零基礎ASP.NET Core MVC外掛式開發

一個專案隨著業務模組的不斷增加,系統會越來越龐大。如果參與開發的人員越多,管理起來難度也很大。面對這樣的情況,首先想到的是模組化外掛式開發,根據業務模組,拆分成各個獨立的外掛,然後分配不同開發人員開發,互相之間沒有依賴完全獨立。

這裡介紹一種使用ASP.NET Core MVC 技術開發Web後臺系統,使用外掛式的方案。這個方案在專案中已經使用效果覺得還不錯,這裡把主要思想提取出來,做個簡單的demo分享下

 

一、建立主專案

這裡使用的開發工具是vs2019ASP.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.dllxxx.Views.dll,放到主專案裡面去就可以執行了。

 

但是作為外掛開發者,每次需要把檔案釋出放到主專案去才能執行,對開發除錯都是不方便,因為外掛開發者可能就沒有主專案的許可權,主專案是統一管理的。分配一個外掛還每次都附帶一個主專案也比較繁瑣。

想到這裡就可以反過來把主程式dll註冊到外掛專案裡面,這樣就可以在外掛專案裡面vs直接執行除錯起來。

 

以外掛1為例,Startup.cs類裡面增加如下程式碼,圖10

 

10

 

這樣把主程式的dll提供,比如這個演示demo主程式就需要這兩個(Agile.WebPlatform.Main.dllAgile.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

 

 

 

希望你看了之後有點收穫,程式碼程式下面附件提供

demo程式

 

相關文章