您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關ASP.Net Core MVC中服務注冊和管道的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
DI容器呢, 依賴接口, 所以我們先新建一個接口, 就叫 IWelcome , 接口里面定義個方法, 叫GetWelcomMsg, 然后再建個類, 實現這個接口, 這樣, 我們的一個最基本的服務就做好了. 代碼結構和代碼如下圖 (我建了個文件夾, 存放這些服務):
代碼編寫完之后, 我們嘗試在Configure方法里面注入引用這個接口, 因為我們獲取配置信息的時候也是直接在這個方法里面注入使用的, 那我們來試試, 代碼如下圖 :
一切都很正常, 方法也能調用, 我們跑起來試試看, 能不能正常使用.
一點都不意外, 它報錯了, 報錯信息如下圖 :
意思就是無法解析IWelcome這個服務, 也是就無法注入這個服務.
那么為什么IConfiguration,IHostingEnvironment,IApplicationBuilder等等之類的接口, 我們能直接注入使用呢, 那是ASP.Net Core MVC里面的源包里面, 已經自動為我們注冊好了這幾個服務, 我們直接可以使用. 我們要使用自定義的服務或者組件, 需要我們自己進行注冊.
說到自定義服務注冊, 就不得不說服務注冊的幾種方式, 或者說是幾種不同的注冊方法. 總共分為三種, 也就是三個注冊服務的方法.
我們看看 Startup 這個類, 會發現它里面有個ConfigureServices方法, 看名字就知道, 它是配置服務用的, 有個IServiceCollection接口參數, 這個接口就是.Net Core默認提供的DI服務的接口管理對象, 我們所有注冊的服務都可以通過這個接口進行管理或操作. 如果使用第三方包, 如Autofac另說, 這里不介紹Autofac的使用.
那么我們就可以通過IServiceCollection接口進行我們自定義服務的注冊了, 上面提到了有三個注冊服務的方法, 分別是 :
1.AddSingleton (單例模式注冊服務, 也就是在整個應用程序中, 只會創建一個接口對象, 所有的請求都會使用這個接口對象, 可能會有并發問題)
2.AddTransient (管道機制注冊服務. 也是在每個請求發生的時候, 都會創建一個接口對象, 給當前請求使用)
3.AddScoped (會話機制注冊服務. 也就是在當前會話中, 只會創建一個接口對象. 什么是一個會話, 可以簡單理解為當前瀏覽器打開到關閉, 這個過程就是一整個會話的過程)
那么這里, 我們先使用AddSingleton單例模式注冊服務, 代碼如下 :
services.AddSingleton<IWelcome, Welcome.Services.Welcome>();
上面提到的三個方法, 使用方式都一樣, 都是兩個泛型參數, 第一個泛型參數是接口, 第二個是泛型參數是接口實現類.
那么再運行一個我們的程序, 可以看到瀏覽器正常輸出我們的字符串了.
至于上面三個不同生命周期的注冊方法, 怎么使用, 看服務的用途, 一般我推薦使用AddScoped注冊服務
到這里, 我們一個簡單的服務就從定義到實現到注冊到使用就完成了. 是不是很簡單呢.
下面我們簡單講講ASP.Net Core MVC的管道
這里我只會簡單講解ASP.Net Core MVC的管道運行流程, 不會講解從監聽端口到轉發到ASP.Net Core MVC里面是怎么實現的
比如我們現在發起一個Get請求, 在MVC收到這個請求的時候, 我們的管道流程就開始運行了, 它會最先觸發Logger這個中間件, 就是日志中間件, 這個中間件里面可以獲取很多信息, 比如請求頭部信息, 參數信息等等, 甚至我們可以對這些信息進行修改. 這些信息也會在控制臺輸出, 如果用的是dotnet run命令運行這個MVC程序的話, 這里不放截圖了, 你們可以自己試試
在日志中間件執行完之后, 就會執行其它的中間件, 如果我們啟用了其它的中間件. 比如我們啟用了身份驗證中間件, 那么在日志中間件執行完成之后, 就會執行身份驗證中間件, 進行身份驗證, 如果驗證成功了, 繼續下一步處理, 如果驗證失敗了, 就做其它處理, 比如重定向到登錄頁面等等.
在這一步執行完成之后, MVC管道就會進入路由匹配的過程. 如果匹配成了, 就正常返回HTML或JSON或XML數據等等, 如果匹配失敗了, 就404錯誤等等.
感謝各位的閱讀!關于“ASP.Net Core MVC中服務注冊和管道的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。