最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.Net Core MVC基礎(chǔ)系列之服務(wù)注冊(cè)和管道

 更新時(shí)間:2022年02月13日 09:43:30   作者:丶亡我之心不死  
這篇文章介紹了ASP.Net Core MVC中的服務(wù)注冊(cè)和管道,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

想必大家都知道ASP.Net Core MVC默認(rèn)自帶了DI容器的, 我們可以很方便的進(jìn)行使用, 來(lái)方便管理對(duì)象和生命周期, 那么這一節(jié)我就會(huì)詳細(xì)講解服務(wù)注冊(cè), 順便簡(jiǎn)單講解一下管道, 讓大家知道了基本的MVC運(yùn)行流程.

回顧一下上一節(jié)的內(nèi)容, 我們從配置文件中獲取了輸出的字符, 也介紹各個(gè)配置的 "優(yōu)先級(jí)" (其實(shí)是配置覆蓋), 那么我們這一節(jié)以服務(wù)的方式輸出這個(gè)字符串, 然后用過(guò)DI進(jìn)行注冊(cè)服務(wù), 快速了解服務(wù)注冊(cè).

DI容器呢, 依賴(lài)接口, 所以我們先新建一個(gè)接口, 就叫 IWelcome , 接口里面定義個(gè)方法, 叫GetWelcomMsg, 然后再建個(gè)類(lèi), 實(shí)現(xiàn)這個(gè)接口, 這樣, 我們的一個(gè)最基本的服務(wù)就做好了. 代碼結(jié)構(gòu)和代碼如下圖 (我建了個(gè)文件夾, 存放這些服務(wù)):

代碼編寫(xiě)完之后, 我們嘗試在Configure方法里面注入引用這個(gè)接口, 因?yàn)槲覀儷@取配置信息的時(shí)候也是直接在這個(gè)方法里面注入使用的, 那我們來(lái)試試, 代碼如下圖 :

一切都很正常, 方法也能調(diào)用, 我們跑起來(lái)試試看, 能不能正常使用.

一點(diǎn)都不意外, 它報(bào)錯(cuò)了, 報(bào)錯(cuò)信息如下圖 :

意思就是無(wú)法解析IWelcome這個(gè)服務(wù), 也是就無(wú)法注入這個(gè)服務(wù).

那么為什么IConfiguration,IHostingEnvironment,IApplicationBuilder等等之類(lèi)的接口, 我們能直接注入使用呢, 那是ASP.Net Core MVC里面的源包里面, 已經(jīng)自動(dòng)為我們注冊(cè)好了這幾個(gè)服務(wù), 我們直接可以使用. 我們要使用自定義的服務(wù)或者組件, 需要我們自己進(jìn)行注冊(cè).

說(shuō)到自定義服務(wù)注冊(cè), 就不得不說(shuō)服務(wù)注冊(cè)的幾種方式, 或者說(shuō)是幾種不同的注冊(cè)方法. 總共分為三種, 也就是三個(gè)注冊(cè)服務(wù)的方法.

我們看看 Startup 這個(gè)類(lèi), 會(huì)發(fā)現(xiàn)它里面有個(gè)ConfigureServices方法, 看名字就知道, 它是配置服務(wù)用的, 有個(gè)IServiceCollection接口參數(shù), 這個(gè)接口就是.Net Core默認(rèn)提供的DI服務(wù)的接口管理對(duì)象, 我們所有注冊(cè)的服務(wù)都可以通過(guò)這個(gè)接口進(jìn)行管理或操作. 如果使用第三方包, 如Autofac另說(shuō), 這里不介紹Autofac的使用.

那么我們就可以通過(guò)IServiceCollection接口進(jìn)行我們自定義服務(wù)的注冊(cè)了, 上面提到了有三個(gè)注冊(cè)服務(wù)的方法, 分別是 :

  • 1.AddSingleton (單例模式注冊(cè)服務(wù), 也就是在整個(gè)應(yīng)用程序中, 只會(huì)創(chuàng)建一個(gè)接口對(duì)象, 所有的請(qǐng)求都會(huì)使用這個(gè)接口對(duì)象, 可能會(huì)有并發(fā)問(wèn)題)
  • 2.AddTransient (管道機(jī)制注冊(cè)服務(wù). 也是在每個(gè)請(qǐng)求發(fā)生的時(shí)候, 都會(huì)創(chuàng)建一個(gè)接口對(duì)象, 給當(dāng)前請(qǐng)求使用)
  • 3.AddScoped (會(huì)話機(jī)制注冊(cè)服務(wù). 也就是在當(dāng)前會(huì)話中, 只會(huì)創(chuàng)建一個(gè)接口對(duì)象. 什么是一個(gè)會(huì)話, 可以簡(jiǎn)單理解為當(dāng)前瀏覽器打開(kāi)到關(guān)閉, 這個(gè)過(guò)程就是一整個(gè)會(huì)話的過(guò)程)

那么這里, 我們先使用AddSingleton單例模式注冊(cè)服務(wù), 代碼如下 :

services.AddSingleton<IWelcome, Welcome.Services.Welcome>();

上面提到的三個(gè)方法, 使用方式都一樣, 都是兩個(gè)泛型參數(shù), 第一個(gè)泛型參數(shù)是接口, 第二個(gè)是泛型參數(shù)是接口實(shí)現(xiàn)類(lèi).

那么再運(yùn)行一個(gè)我們的程序, 可以看到瀏覽器正常輸出我們的字符串了.

至于上面三個(gè)不同生命周期的注冊(cè)方法, 怎么使用, 看服務(wù)的用途, 一般我推薦使用AddScoped注冊(cè)服務(wù)

到這里, 我們一個(gè)簡(jiǎn)單的服務(wù)就從定義到實(shí)現(xiàn)到注冊(cè)到使用就完成了. 是不是很簡(jiǎn)單呢.

下面我們簡(jiǎn)單講講ASP.Net Core MVC的管道

這里我只會(huì)簡(jiǎn)單講解ASP.Net Core MVC的管道運(yùn)行流程, 不會(huì)講解從監(jiān)聽(tīng)端口到轉(zhuǎn)發(fā)到ASP.Net Core MVC里面是怎么實(shí)現(xiàn)的

比如我們現(xiàn)在發(fā)起一個(gè)Get請(qǐng)求, 在MVC收到這個(gè)請(qǐng)求的時(shí)候, 我們的管道流程就開(kāi)始運(yùn)行了, 它會(huì)最先觸發(fā)Logger這個(gè)中間件, 就是日志中間件, 這個(gè)中間件里面可以獲取很多信息, 比如請(qǐng)求頭部信息, 參數(shù)信息等等, 甚至我們可以對(duì)這些信息進(jìn)行修改. 這些信息也會(huì)在控制臺(tái)輸出, 如果用的是dotnet run命令運(yùn)行這個(gè)MVC程序的話, 這里不放截圖了, 你們可以自己試試

在日志中間件執(zhí)行完之后, 就會(huì)執(zhí)行其它的中間件, 如果我們啟用了其它的中間件. 比如我們啟用了身份驗(yàn)證中間件, 那么在日志中間件執(zhí)行完成之后, 就會(huì)執(zhí)行身份驗(yàn)證中間件, 進(jìn)行身份驗(yàn)證, 如果驗(yàn)證成功了, 繼續(xù)下一步處理, 如果驗(yàn)證失敗了, 就做其它處理, 比如重定向到登錄頁(yè)面等等.

在這一步執(zhí)行完成之后, MVC管道就會(huì)進(jìn)入路由匹配的過(guò)程. 如果匹配成了, 就正常返回HTML或JSON或XML數(shù)據(jù)等等, 如果匹配失敗了, 就404錯(cuò)誤等等.

這就是ASP.Net Core MVC管道的一個(gè)基本流程, 其實(shí)里面做的事情遠(yuǎn)遠(yuǎn)不止這些, 這里就不做深入的講解, 如果有需要, 自行學(xué)習(xí). 因?yàn)橹v一個(gè)真正的管道機(jī)制, 一下子也講不完. 這里的目的只是要大家基本了解ASP.Net Core MVC的基本運(yùn)行流程.

到此這篇關(guān)于ASP.Net Core MVC基礎(chǔ)系列之服務(wù)注冊(cè)和管道的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET Core依賴(lài)關(guān)系注入

    ASP.NET Core依賴(lài)關(guān)系注入

    這篇文章介紹了ASP.NET Core中的依賴(lài)關(guān)系注入,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ADO.NET 連接數(shù)據(jù)庫(kù)字符串小結(jié)(Oracle、SqlServer、Access、ODBC)

    ADO.NET 連接數(shù)據(jù)庫(kù)字符串小結(jié)(Oracle、SqlServer、Access、ODBC)

    ADO.NET 連接數(shù)據(jù)庫(kù)字符串小結(jié),包括Oracle、SqlServer、Access、ODBC,需要的朋友可以收藏下
    2012-04-04
  • IIS部署ASP.NET?Core項(xiàng)目及常見(jiàn)問(wèn)題總結(jié)

    IIS部署ASP.NET?Core項(xiàng)目及常見(jiàn)問(wèn)題總結(jié)

    這篇文章介紹了IIS部署ASP.NET?Core項(xiàng)目的方法及常見(jiàn)問(wèn)題總結(jié),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Json.Net6.0用法介紹

    Json.Net6.0用法介紹

    這篇文章介紹了Json.Net6.0的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • .Net中Task Parallel Library的基本用法

    .Net中Task Parallel Library的基本用法

    這篇文章介紹了.Net中Task Parallel Library的基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • .Net行為型設(shè)計(jì)模式之模板方法模式(Template?Method)

    .Net行為型設(shè)計(jì)模式之模板方法模式(Template?Method)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之模板方法模式(Template?Method),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • .Net行為型設(shè)計(jì)模式之觀察者模式(Observer)

    .Net行為型設(shè)計(jì)模式之觀察者模式(Observer)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之觀察者模式(Observer),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WPF框架Prism中ViewModelLocator用法介紹

    WPF框架Prism中ViewModelLocator用法介紹

    這篇文章介紹了WPF框架Prism中ViewModelLocator的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ABP框架的基礎(chǔ)配置及依賴(lài)注入講解

    ABP框架的基礎(chǔ)配置及依賴(lài)注入講解

    這篇文章主要介紹了ABP框架的基礎(chǔ)配置及依賴(lài)注入講解,是ABP框架上手使用的基本,要的朋友可以參考下
    2016-06-06
  • Blazor頁(yè)面組件用法介紹

    Blazor頁(yè)面組件用法介紹

    這篇文章介紹了Blazor頁(yè)面組件的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評(píng)論

青川县| 抚宁县| 两当县| 灵山县| 任丘市| 措勤县| 鸡泽县| 玉溪市| 美姑县| 镇原县| 西贡区| 革吉县| 河北区| 沂源县| 深泽县| 安西县| 吴川市| 黑山县| 思南县| 江安县| 翁牛特旗| 大同县| 那曲县| 教育| 烟台市| 滁州市| 顺平县| 锦屏县| 建瓯市| 渭源县| 高雄市| 上思县| 旌德县| 武邑县| 五台县| 丹寨县| 会昌县| 竹溪县| 周口市| 吉林市| 明星|