零基礎ASP.NET Core MVC插件式開發


零基礎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程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM