.netcore入門24:aspnetcore源碼分析之在通用主機上配置web服務

環境:

  • window 10
  • .netcore 3.1
  • vs2019 16.5.1

說明:
上一篇介紹到了aspnetcore中的通用主機,這個通用主機封裝了日誌、配置、依賴注入容器等資源,並且裏面包括了一些列的主機服務(IHostedService),而web服務就是其中的一個主機服務。這篇就來分析,aspnetcore是怎樣將web服務(GenericWebHostService)注入到通用主機中的(Host)。

正文:

通過上篇我們知道,通用主機使用的主要步驟如下:

  • 1.創建主機構建者對象(HostBuilder)
  • 2.將構建邏輯存儲到主機構建者對象中
  • 3.調用主機構建者對象的build方法構造出主機對象(Host)
  • 4.啓動主機對象Host,Host中的主機服務(IHostedService)也隨着啓動
  • 5.關閉主機對象Host,Host中的主機服務(IHostedService)也隨之關閉

接下來我們僅分析負責web的主機服務(主要是Startup.cs的實例化、ConfigureServices和Configure方法的調用時機),先來看下面代碼:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

在上面代碼中,我們通過.ConfigureWebHostDefaults(...)將web服務注入進去的,其他的代碼都是針對通用主機的,那麼我們就調試進入這個方法:
在這裏插入圖片描述
通過上圖可以看出,最終我們創建了一個web主機服務的構造者對象(GenericWebHostBuilder),而這個GenericWebHostBuilder其實就是封裝了HostBuilder而已,那麼通過GenericWebHostBuilder注入的處理邏輯也就存儲到了HostBuilder的_configureHostConfigActions 、_configureAppConfigActions 、_configureServicesActions 中,我們看一下GenericWebHostBuilder的構造函數:
在這裏插入圖片描述
通過上圖,我們應該對“GenericWebHostBuilder其實就是封裝了HostBuilder而已”這句話有了直觀的理解了。
我們將上面調試代碼的執行邏輯梳理一下:
在這裏插入圖片描述
從上面圖可以看到,我們在配置的時候就執行了webBuilder.UseStartup<Startup>();方法,那麼我們深入這個方法看一下:

未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章