DotnetCore學習筆記之IWebHostBuilder(Web主機)

DotnetCore學習筆記之IWebHostBuilder(Web主機)

一. 什麼是IWebHostBuilder

    關於什麼是IWebHostBuilder,我也不知道!!(見笑見笑)
    所以纔要學習嘛!

二、開啓學習之路

    接下來我們來學一下介是個嘛玩意!
    首先,當我們創建一個DotNetCore Web項目的時候,我們會發現DotNetCore自動會幫我們創建一個Program.Cs文件和StartUp.Cs 文件放在那,而在Program.Cs文件裏面就有個CreateWebHostBuilder()方法的返回類型就是IWebHostBuilder接口,那麼這個東西是幹什麼的呢,這個我們先不要在意,我們先來運行下當前的項目,看一下當前項目的啓動流程。

在這裏插入圖片描述

從上圖可以看出,當我們啓動程序的時候程序會先進入Program類下的Main方法裏面,這一點相信寫過控制檯程序的小夥伴們都很熟悉,那麼這是不是就是意味着DotNetCore的Web程序其實從本質上和控制檯程序差不多呢?然後我查找了一下微軟的文檔,而微軟的定義是“主機”。Asp.Net Core中微軟給我們提供了兩個主機,一個是通用主機,第二個就是我們看到的這個Web主機,而我們在Program.cs裏面看到的CreateWebHostBuilder()方法就是創建一個使用IWebHostBuilder實例的主機,該主機主要負責應用程序啓動和生存期管理,換句話說我們的應用程序其實是託管在了這個Web主機上面。
    接下來,我們來看下面的代碼,我們會很直觀地看到,其實CreateWebHostBuilder()方法主要就是爲了配置Web服務器的各項配置

在這裏插入圖片描述


下文變量聲明:
     Method   CreateDefaultBuilder   主機默認構建方法 ;

    比如我們會發現首先方法會調用WebHost類下面的主機默認構建方法來構建一個默認的Web主機,而通過上面的圖片我們可以看出在上面的那段代碼裏面我在主機默認構建方法下面寫了UseKestrel()方法,其實這是沒有必要的,我之所以這麼寫是因爲我之前參與的項目中都這麼寫,當時我還沒看過源碼以及文檔,所以就跟着一起這麼寫,就在剛剛看完源碼和文檔以後我發現其實在上面的主機默認構建方法方法內部其實早已實現了UseKestrel()方法,而UseKestrel()方法其實是爲了讓你在未調用主機默認構建方法的時候調用或者重寫主機默認構建方法在內部配置的kestrel服務器各項配置所調用的,所以由此可知該方法所返回的WebHostBuilder主要作用是使用Kestrel作爲Web服務器並使用應用程序的配置提供程序對其進行配置,並且根據文檔描述還有將內容根設置爲由Directory.GetCurrentDirectory 返回的路徑,然後通過用戶配置的環境變量文件加載主機的配置,具體的大家可以自行去微軟官方文檔上面瀏覽
    

經過修改的代碼段

在這裏插入圖片描述

或者

在這裏插入圖片描述

看到這裏突然又有一個問題出來了,那就是爲什麼第二張圖的返回類型和第一張圖的返回類型不一樣,其實第一張圖的返回的是一個Web主機配置實例(IWebHostBulider),而通過CreateWebHostBuilder(args).Build()方法會在內部實例出一個Web主機(IwebHost)的實例出來並且返回,然後通過Run()方法啓動我們的應用程序,而第二張圖的寫法和第一張其實差不多,可以看作是第一張圖的主機默認構建方法內部實現邏輯也說得通,該方法也是實例出一個Web主機配置實例(WebHostBulider)出來並且調用Build()方法實例出一個Web主機的實例並且調用Run()方法啓動程序

不算總結的總結

路漫漫其修遠兮,吾將上下而求索

如果有那位大牛看到小弟的博文,並且能給予小弟一些批評指正,小弟萬分感謝,如果有哪位仁兄因爲小弟的博文而學到一些哪怕皮毛知識,小弟也覺得萬分榮幸,希望各位大牛批評指正!

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