0%

【Asp.Net Core】生命週期

asp-dotnet-core-lifetime

前言

Asp.Net Core的程式生命週期和DI生命週期,有很多小細節需要注意。像是DI的生命週期選擇和Program和Startup的程式執行順序…這邊把相關的資訊整理一下,來連貫整個過程!

執行流程

執行流程

  1. Main
    • .NET Core 把 Web 及 Console 專案都變成一樣的啟動方式,預設從 Program.cs 的 Main() 做為程式進入點
  2. CreateHostBuilder
    • 可以在 Host 產生之前設定一些前置準備動作,當 Host 建立完成時,就可以使用已準備好的物件等
  3. Host 載入設定檔
    • CreateDefaultBuilder

      預設會將appsettings.json作為設定檔,載入到Startup的configuration。如果需要依照不同的環境(開發,正式…)來讀取設定檔,可以參考這邊

    • ConfigureWebHostDefaults

      預設會使用 Kestrel 作為Server

    • 設定 WebHostBuilder 產生的 WebHost 時,所要執行的類別(Startup)
  4. Startup - ConfigureServices
    • 將相依的服務註冊到DI容器
    • 設定適合的DI生命週期
      • Singleton

        整個Process只建立一個Instance,任何時候都共用它

      • Scoped

        在網頁Request處理過程(指接到瀏覽器請求到回傳結果前的執行期間)共用一個Instance

      • Transient

        每次Request時就建立一個新的,永不共用

  5. Startup - Configure
  6. Build
    • 當前置準備都設定完成後,就可以呼叫此方法實例化 Host,同時也會實例化 WebHost
  7. Run
    • 啟動 Host

流程圖

流程圖

心得

一開始對asp .net core的生命週期還不太了解,製作了執行的流程圖後,感覺清楚多了! 如果有遺漏的部分後續會再調整~


References