1. 程式人生 > 其它 >Asp.Net Core 中 Host 與 WebHost的區別

Asp.Net Core 中 Host 與 WebHost的區別

最近開發包含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