1, 新建一個空的AspNetCore項目,預設Program下的代碼如下: 1 public static void Main(string[] args) 2 3 { 4 5 BuildWebHost(args).Run(); 6 7 } 8 9 10 11 public static IWeb ...
1, 新建一個空的AspNetCore項目,預設Program下的代碼如下:
1 public static void Main(string[] args) 2 3 { 4 5 BuildWebHost(args).Run(); 6 7 } 8 9 10 11 public static IWebHost BuildWebHost(string[] args) => 12 13 WebHost.CreateDefaultBuilder(args) 14 15 .UseStartup<Startup>() 16 17 .Build();View Code
代碼很簡單,有main入口開始執行,調用靜態方法BuildWebHost開始構建WebHost.
2,今天主要探究下整個webhost的構建過程和涉及到的相關介面和類.
首先查看下這裡的WebHost是個什麼東東,F12查看源碼
可以看到如圖所示WebHost類實際上是IWebHostBuilder和IWebHost封裝了下而已並沒有多麼神奇的功能。
3,接下來我們看下WebHost.CreateDefaultBuilder(args)這句,跟蹤進去查看
貌似是實例化一個WebHostBuilder的對象。
Ok重點來了,這個就是我們整個流程的開始了,由CreateDefaultBuilder創建WebHostBuilder對象,然後由這個對象創建我們所熟知的WebHost對象,那麼WebHost對象在哪呢,我們接著往下看
4,下一句是UseStartup<Startup>()這個是幹嘛的,繼續跟蹤下去
可以看到UseStartup是一個IWebHostBuilder的泛型擴展方法,至於這個方法的作用主要就是指定Web主機要使用的啟動類型。也就是將Startup這個類的類型作為參數傳遞進去,繼續跟蹤這個方法的實現
可以看出所指定的Startup類型會在DI容器中註冊為單例形式,註冊的處理過程被封裝成Action。
至於這個Startup類有什麼限制本章先不討論。
5,接下來看看Build()這個方法
這一步貌似就是為了構建我們的第二個重要對象WebHost,至於具體如何構建的這裡只是初步探究,暫不細究。
6,有了對象WebHost那接下來就是要(Run)運行起來了繼續查看
可以看到又是一個擴展方法,不過這個擴展方法是IWebHost的擴展方法,到Run()這一步基本上我們的應用程式就跑起來了,當然Run()里的執行邏輯包括埠監聽,Url處理等待這裡先不細說。
總結:本篇初步探索了下AspNetCore的2大對象WebHost,WebHostBuilder。具體的對象的構建過程本章忽略了,僅供給自己和初入門的朋友一個參考,不足之處肯定多多的,歡迎指正
備註:AspNetCore的版本是2.0的哦,別弄差了。