asp net core 3.1啟動過程源碼解讀


一:與以前的asp.net區別

  •    代碼開源了,不需要反編譯了,隨時隨地調試源碼
  •     以應用程序方式啟動,而不是直接建立一個web網站
  •     asp.net是全家桶的方式,而net core是以自選套餐形式,定義了基礎的一些組件后,當你需要用什么類庫的時候就得自己去引用或者造輪子(當然,一般都很少機會造)
  •     asp.net配置文件是.config ,而net core是.json(默認加載appsettings.json,也可以自定義指定)
  •     很多地方默認實現了IOC和DI,反正就是無處不在的IOC和DI,使程序編程更加靈活多變

       總的來說:輕量化、靈活多變、開源、跨平台

二:與netcore 2.x版本區別

         具體請看官網: https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.1#generic-host

         我個人覺得最明顯的就2個地方:一個是默認使用的序列化改成 System.Text.Json  另外一個就是通用主機 ,可以讓我們自定義服務,用來承載任何服務

三:創建項目后自動生成的代碼啟動過程源碼解讀

       先看代碼,這是一個web api的項目,默認實現了一些方法

       

  public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args)
.Build()//創建host宿主
.Run();//運行程序 }
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)//創建IHostBuilderhost對象,讀取默認配置 .ConfigureWebHostDefaults(webBuilder =>//注冊默認服務 { webBuilder.UseStartup<Startup>(); }) ; }

 

   從上面的代碼執行順序可以看到先創建一個IHostBuilder抽象對象,然后執行讀取默認配置方法,然后注冊一系列服務,最后創建host宿主,運行程序。

   接下來可以拆分步驟解讀源碼

      1. 創建IHostBuilderhost宿主,讀取默認配置,從源碼上我們可以看到 執行順序,里面我也加了一些注釋(Microsoft.Extensions.Hosting.Host類)

        

    2.注冊一系列服務(ConfigureWebHostDefaults這個方法),里面主要做了以下這些事(Microsoft.Extensions.Hosting.GenericHostBuilderExtensions類)  

      

 

 

        a.調用WebHost.ConfigureWebDefaults方法,注冊web宿主,這里面就是注冊一系列默認的服務(Microsoft.AspNetCore.WebHost )

   

                 

 

            b.讀取擴展的委托

       

     3.創建host宿主(Microsoft.Extensions.Hosting.HostBuilder)

     

 

 

 

            

  ps:從上面Build方法的源碼可以看出來,啟動是有順序的,所以Startup 這個類不是必要的,因為Startup里面就2個方法(ConfigureService和Config),也就是對應上面源碼的CreateServiceProvider()方法,它只是讓代碼結構看起來更加合理

 

 

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM