1. 程式人生 > >ASP.Net Core 2.2 MVC入門到基本使用系列 (三)

ASP.Net Core 2.2 MVC入門到基本使用系列 (三)

conf 正常 所有 代碼 core () 文件 發生 行修改

本教程會對基本的.Net Core 進行一個大概的且不會太深入的講解, 在您看完本系列之後, 能基本甚至熟練的使用.Net Core進行Web開發, 感受到.Net Core的魅力.

本教程知識點大體分為以下幾個階段

  • ASP.Net Core MVC基礎知識
  1. Startup基本配置和理解
  2. Controller使用
  3. Razor視圖
  4. 傳統視圖
  5. Model Validation (基本用法)
  6. 一點點的Vue (教程使用Vue配合)
  • SqlSugar ORM (進行數據庫交互)
  • Entity Framework Core(基本介紹使用)
  • 授權和身份驗證(MVC的, WebApi的不進行介紹)
  • 安全性
  • 測試 / 單元測試
  • 性能基本優化
  • 日誌功能
  • CI/CD
  • Windows部署
  • Linux部署

想必大家都知道ASP.Net Core MVC默認自帶了DI容器的, 我們可以很方便的進行使用, 來方便管理對象和生命周期, 那麽這一節我就會詳細講解服務註冊, 順便簡單講解一下管道, 讓大家知道了基本的MVC運行流程.

  回顧一下上一節的內容, 我們從配置文件中獲取了輸出的字符, 也介紹各個配置的 "優先級" (其實是配置覆蓋), 那麽我們這一節以服務的方式輸出這個字符串, 然後用過DI進行註冊服務, 快速了解服務註冊.

  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管道的一個基本流程, 其實裏面做的事情遠遠不止這些, 這裏就不做深入的講解, 如果有需要, 自行學習. 因為講一個真正的管道機制, 一下子也講不完. 這裏的目的只是要大家基本了解ASP.Net Core MVC的基本運行流程.

到這裏, 這一節的內容就結束了. 上面提到了中間件這個東西, 那下一節我們就講究什麽是中間件, 怎麽使用中間件.

如果在使用.Net Core遇到任何問題, 都加群進行討論, 群號: 1群: 225982985. 2群: 726648662. 3群: 654015377

上一篇: ASP.Net Core 2.2 MVC入門到基本使用系列 (二)

ASP.Net Core 2.2 MVC入門到基本使用系列 (三)