做盜版網(wǎng)站違法嗎湖南網(wǎng)站設(shè)計(jì)
🚀前言
本文是《.Net Core進(jìn)階編程課程》教程專欄的導(dǎo)航站(點(diǎn)擊鏈接,跳轉(zhuǎn)到專欄主頁(yè),歡迎訂閱,持續(xù)更新…)
專欄介紹:通過(guò)源碼實(shí)例來(lái)講解Asp.Net Core進(jìn)階知識(shí)點(diǎn),讓大家完全掌握每一個(gè)知識(shí)點(diǎn)。
專欄適用于人群:Web后端開(kāi)發(fā)人員
————————————————
本課程內(nèi)容:
1、動(dòng)態(tài)Web API背景
2、動(dòng)態(tài)Web API實(shí)現(xiàn)原理
3、識(shí)別自定義控制器
一、動(dòng)態(tài)Web API背景
一說(shuō)到動(dòng)態(tài)Web API,很多人都是因?yàn)槭褂肁BP框架了解的。在講解如何實(shí)現(xiàn)之前,我們了解下動(dòng)態(tài)Web API的好處!
在DDD框架中,領(lǐng)域?qū)雍蛻?yīng)用層是核心、所有業(yè)務(wù)處理與邏輯全部放在這兩個(gè)層,而API層是只是薄薄的一層。
比如:DDD教程里的API代碼,都是只有2行代碼。
這樣就存在2個(gè)問(wèn)題:
1、每一個(gè)對(duì)外提供的API接口,我們都需要編寫(xiě),這些都很機(jī)械化的代碼。
2、EletricAuthorize權(quán)限驗(yàn)證,其實(shí)是屬于應(yīng)用層的,但這邊被放在API層。
而通過(guò)動(dòng)態(tài)Web API,可以減少代碼量、提升工作效率等諸多好處。
二、動(dòng)態(tài)Web API實(shí)現(xiàn)原理
2.1 應(yīng)用程序部件
我們之所以可以實(shí)現(xiàn)動(dòng)態(tài)Web API,要?dú)w功于Asp.net Core為我們提供的:應(yīng)用程序部件。
在Asp.Net Core架構(gòu)里,MVC控制器、視圖組件、Razor Pages、Razor 視圖、標(biāo)記幫助程序(Tag Helpers)等都是一個(gè)獨(dú)立的功能組件,它允許我們通過(guò)發(fā)現(xiàn)并加載應(yīng)用程序中的特定功能組件。
比如:Web API只需加載MVC控制器、MVC架構(gòu)的程序需要加載MVC控制器、視圖組件。
比如官方文檔里示例里,就是通過(guò)加載外部的DLL庫(kù),來(lái)加載控制器。
官方文檔地址:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-8.0
2.2 獨(dú)立控制器項(xiàng)目示例
下面用一個(gè)示例來(lái)演示下,如何使用。
2.2.1 新建Web API項(xiàng)目
項(xiàng)目名稱:Electric.DynamicWebAPI
為了后續(xù)方便調(diào)試:勾選啟用OpenAPI,框架版本:這里選擇.Net 7.0(這里可以根據(jù)需求自行選擇)。
添加后的目錄:
2.2.2 新建控制器項(xiàng)目
選擇類(lèi)庫(kù)項(xiàng)目
項(xiàng)目名稱:Electric.Controller
框架:.Net 7.0
添加后的目錄:
2.2.3 新增控制器
在項(xiàng)目Electric.Controller,新增控制器:TestController。
TestController代碼:
using Microsoft.AspNetCore.Mvc;namespace Electric.Controller
{[ApiController][Route("[controller]")]public class TestController : ControllerBase{[HttpGet]public string GetName(){return "GetName";}}
}
2.2.4 編譯項(xiàng)目Electric.Controller
編譯后把dll拷貝至 Electric.DynamicWebAPI項(xiàng)目bin目錄下。
2.2.5 Electric.DynamicWebAPI加載控制器
在Program.cs加載程序集dll。
當(dāng)然了,如果Electric.DynamicWebAPI如果引用了項(xiàng)目TestController,Asp.Net Core框架會(huì)默認(rèn)掃描所有控制器,就不需要添加上面的代碼。
//加載控制器var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Electric.Controller.dll");builder.Services.AddControllers().AddApplicationPart(assembly);
2.2.6 運(yùn)行項(xiàng)目
運(yùn)行項(xiàng)目后,我們就可以看到控制器:TestController,已經(jīng)被加載了。
2.3 ApplicationPartManager
通過(guò)官方文檔和上面的演示,知道Asp.Net Core為我們提供了ApplicationPartManager,來(lái)方便我們根據(jù)需求來(lái)加載各種組件,比如控制器組件、視圖組件等。
官方文檔也告訴我們,通過(guò)AddApplicationPart和ConfigureApplicationPartManager,都可以實(shí)現(xiàn)加載組件。
3、識(shí)別自定義控制器
3.1 問(wèn)題
看完上面的例子,可能會(huì)有很多人會(huì)產(chǎn)生一個(gè)問(wèn)題:你定義的控制器,是繼承了ControllerBase,Asp.Net Core可以自動(dòng)識(shí)別,但是我們?cè)贒DD框架中,編寫(xiě)的可是應(yīng)用服務(wù),不會(huì)去繼承ControllerBase。
3.2 檢查應(yīng)用程序部件
針對(duì)上面的問(wèn)題,我們就需要用到:檢查應(yīng)用程序部件。
Asp.net Core也為我們提供了檢查應(yīng)用程序部件的方法,通過(guò)這些功能提供程序,我們就可以告訴
Asp.net Core哪一個(gè)是控制器。
3.3 ApplicationPartManager 定義
我們通過(guò)ApplicationPartManager的源碼定義看,我們就可以很清楚的知道。
我們要實(shí)現(xiàn)動(dòng)態(tài)API,只需兩個(gè)步驟:
1、為ApplicationParts加載程序集資源;
2、為FeatureProviders添加檢查應(yīng)用程序部件的方法,告訴Asp.net Core哪一個(gè)是控制器。
四、最后
【.Net動(dòng)態(tài)Web API】背景與實(shí)現(xiàn)原理就介紹到這邊啦!
下一個(gè)課程講解:如何實(shí)現(xiàn)動(dòng)態(tài)控制器!
這個(gè)系列預(yù)計(jì)一天一篇文章,想要學(xué)習(xí)的可以關(guān)注起來(lái)!
文章會(huì)持續(xù)更新,大家有想要了解的功能點(diǎn)或者話題,可以在評(píng)論區(qū)告訴我!
【本課程源碼下載鏈接】加我:xgbbwj