ASP.Net Core MVC基礎系列之服務注冊和管道
想必大家都知道ASP.Net Core MVC默認自帶了DI容器的, 我們可以很方便的進行使用, 來方便管理對象和生命周期, 那么這一節(jié)我就會詳細講解服務注冊, 順便簡單講解一下管道, 讓大家知道了基本的MVC運行流程.
回顧一下上一節(jié)的內容, 我們從配置文件中獲取了輸出的字符, 也介紹各個配置的 "優(yōu)先級" (其實是配置覆蓋), 那么我們這一節(jié)以服務的方式輸出這個字符串, 然后用過DI進行注冊服務, 快速了解服務注冊.
DI容器呢, 依賴接口, 所以我們先新建一個接口, 就叫 IWelcome , 接口里面定義個方法, 叫GetWelcomMsg, 然后再建個類, 實現(xiàn)這個接口, 這樣, 我們的一個最基本的服務就做好了. 代碼結構和代碼如下圖 (我建了個文件夾, 存放這些服務):



代碼編寫完之后, 我們嘗試在Configure方法里面注入引用這個接口, 因為我們獲取配置信息的時候也是直接在這個方法里面注入使用的, 那我們來試試, 代碼如下圖 :

一切都很正常, 方法也能調用, 我們跑起來試試看, 能不能正常使用.
一點都不意外, 它報錯了, 報錯信息如下圖 :

意思就是無法解析IWelcome這個服務, 也是就無法注入這個服務.
那么為什么IConfiguration,IHostingEnvironment,IApplicationBuilder等等之類的接口, 我們能直接注入使用呢, 那是ASP.Net Core MVC里面的源包里面, 已經自動為我們注冊好了這幾個服務, 我們直接可以使用. 我們要使用自定義的服務或者組件, 需要我們自己進行注冊.
說到自定義服務注冊, 就不得不說服務注冊的幾種方式, 或者說是幾種不同的注冊方法. 總共分為三種, 也就是三個注冊服務的方法.
我們看看 Startup 這個類, 會發(fā)現(xiàn)它里面有個ConfigureServices方法, 看名字就知道, 它是配置服務用的, 有個IServiceCollection接口參數(shù), 這個接口就是.Net Core默認提供的DI服務的接口管理對象, 我們所有注冊的服務都可以通過這個接口進行管理或操作. 如果使用第三方包, 如Autofac另說, 這里不介紹Autofac的使用.
那么我們就可以通過IServiceCollection接口進行我們自定義服務的注冊了, 上面提到了有三個注冊服務的方法, 分別是 :
- 1.AddSingleton (單例模式注冊服務, 也就是在整個應用程序中, 只會創(chuàng)建一個接口對象, 所有的請求都會使用這個接口對象, 可能會有并發(fā)問題)
- 2.AddTransient (管道機制注冊服務. 也是在每個請求發(fā)生的時候, 都會創(chuàng)建一個接口對象, 給當前請求使用)
- 3.AddScoped (會話機制注冊服務. 也就是在當前會話中, 只會創(chuàng)建一個接口對象. 什么是一個會話, 可以簡單理解為當前瀏覽器打開到關閉, 這個過程就是一整個會話的過程)
那么這里, 我們先使用AddSingleton單例模式注冊服務, 代碼如下 :
services.AddSingleton<IWelcome, Welcome.Services.Welcome>();
上面提到的三個方法, 使用方式都一樣, 都是兩個泛型參數(shù), 第一個泛型參數(shù)是接口, 第二個是泛型參數(shù)是接口實現(xiàn)類.
那么再運行一個我們的程序, 可以看到瀏覽器正常輸出我們的字符串了.
至于上面三個不同生命周期的注冊方法, 怎么使用, 看服務的用途, 一般我推薦使用AddScoped注冊服務
到這里, 我們一個簡單的服務就從定義到實現(xiàn)到注冊到使用就完成了. 是不是很簡單呢.
下面我們簡單講講ASP.Net Core MVC的管道
這里我只會簡單講解ASP.Net Core MVC的管道運行流程, 不會講解從監(jiān)聽端口到轉發(fā)到ASP.Net Core MVC里面是怎么實現(xiàn)的
比如我們現(xiàn)在發(fā)起一個Get請求, 在MVC收到這個請求的時候, 我們的管道流程就開始運行了, 它會最先觸發(fā)Logger這個中間件, 就是日志中間件, 這個中間件里面可以獲取很多信息, 比如請求頭部信息, 參數(shù)信息等等, 甚至我們可以對這些信息進行修改. 這些信息也會在控制臺輸出, 如果用的是dotnet run命令運行這個MVC程序的話, 這里不放截圖了, 你們可以自己試試
在日志中間件執(zhí)行完之后, 就會執(zhí)行其它的中間件, 如果我們啟用了其它的中間件. 比如我們啟用了身份驗證中間件, 那么在日志中間件執(zhí)行完成之后, 就會執(zhí)行身份驗證中間件, 進行身份驗證, 如果驗證成功了, 繼續(xù)下一步處理, 如果驗證失敗了, 就做其它處理, 比如重定向到登錄頁面等等.
在這一步執(zhí)行完成之后, MVC管道就會進入路由匹配的過程. 如果匹配成了, 就正常返回HTML或JSON或XML數(shù)據(jù)等等, 如果匹配失敗了, 就404錯誤等等.
這就是ASP.Net Core MVC管道的一個基本流程, 其實里面做的事情遠遠不止這些, 這里就不做深入的講解, 如果有需要, 自行學習. 因為講一個真正的管道機制, 一下子也講不完. 這里的目的只是要大家基本了解ASP.Net Core MVC的基本運行流程.
到此這篇關于ASP.Net Core MVC基礎系列之服務注冊和管道的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
ASP.NET中MultiView和View選項卡控件的使用方法
ASP.NET中的MultiView和View控件可以作為承載其他控件的容器,一般我們都很少使用,本文主要介紹使用MultiView和View實現(xiàn)選項卡效果。2016-04-04
asp.net HttpHandler操作Session的函數(shù)代碼
asp.net HttpHandler操作Session的函數(shù)代碼,需要的朋友可以參考下。2011-12-12

