最近開發包含asp.net core 2.1和3.0,其中主機的創建方式有兩種,這里整理一下其不同
asp.net core 2.1
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
asp.net core 3.0
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
3.0中使用Host,並通過WebBuilder來注入啟動類 Startup;
查詢相關資料
獲得結果
.NET Core 3.0 與 .NET Core 2.2 代碼的區別在於 .NET Core 3.0 使用 通用主機 而 .NET Core 2.2 使用 虛擬主機 用於網絡應用程序。
通用主機包含在 ASP.NET CORE 2.1 中,並成為 .NET Core future 版本的事實上的標准。盡管通用主機包含在 .NET core 2.1 中,但它僅用於非 HTTP 工作負載。在 .NET Core 3.0 中,它成為通用標准(HTTP + 非 HTTP 工作負載)。
從 WebHost 構建器轉向更通用的主機構建器的原因是因為 WebHost 構建器更多地與 HTTP 請求相關聯並且適用於 Web 應用程序,但是隨着微服務和 Docker 的出現,它覺得需要一個更通用的 Web 主機,因此 .NET核心團隊對其進行了改造,使其也可用於控制台應用程序。與 通用主機 可以使用 控制台應用程序中的日志記錄、配置和 DI 庫 .
要創建主機,我們可以使用新的 HostBuilder,它具有與現有 WebHostBuilder 相似的一組方法和擴展。需要注意的一個主要區別是 HostBuilder 沒有提供允許您使用啟動類的擴展方法,因為我們可以使用 WebHostBuilder .這個決定主要是為了避免在幕后創建兩個獨立的 DI 容器的需要。使用通用主機,配置單個服務集合,然后用於構建最終的服務提供者。
官方參照文檔:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-3.1