一:與以前的asp.net區別
- 代碼開源了,不需要反編譯了,隨時隨地調試源碼
- 以應用程序方式啟動,而不是直接建立一個web網站
- asp.net是全家桶的方式,而net core是以自選套餐形式,定義了基礎的一些組件后,當你需要用什么類庫的時候就得自己去引用或者造輪子(當然,一般都很少機會造)
- asp.net配置文件是.config ,而net core是.json(默認加載appsettings.json,也可以自定義指定)
- 很多地方默認實現了IOC和DI,反正就是無處不在的IOC和DI,使程序編程更加靈活多變
總的來說:輕量化、靈活多變、開源、跨平台
二:與netcore 2.x版本區別
我個人覺得最明顯的就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()方法,它只是讓代碼結構看起來更加合理