gpt4 book ai didi

c# - asp.net core中Host类和WebHost类有什么区别

转载 作者:行者123 更新时间:2023-12-01 23:53:04 27 4
gpt4 key购买 nike

我试图将我的应用程序从 asp.net core 2.1 迁移到 3.0,并且在 program.cs 中出现了用于创建主机的第一个建议更改。

asp.net core 2.1程序.cs

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程序.cs

public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

我可以看到,在 asp.net core 3.0 中,它正在创建 Host 而不是 WebHost,并在创建 Host 时注入(inject) WebHostBuilder。

但是我不清楚 Host 和 WebHost 之间有什么区别以及为什么 ASP.NET Core 3.0 应用程序不允许创建 WebHost?

最佳答案

在 .NET Core 3.0 与 .NET core 2.2 代码中可以看到的区别在于,.NET Core 3.0 使用通用主机,而 .NET Core 2.2 使用Web 主机对于网络应用程序。通用主机包含在 ASP.NET CORE 2.1 中,并成为 future 版本 .NET Core 的事实上的标准。尽管通用主机已包含在 .NET core 2.1 中,但它仅用于非 HTTP 工作负载。在 .NET Core 3.0 中,它成为通用标准(HTTP + 非 HTTP 工作负载)。

从 WebHost 构建器转向更通用的 Host 构建器的原因是,WebHost 构建器更多地与 HTTP 请求联系在一起,并且适用于 Web 应用程序,但随着微服务和 Docker 的出现,它感到需要更通用的 Web 主机因此 .NET Core 团队对其进行了改进,使其也可用于控制台应用程序。借助通用主机,可以在控制台应用程序中利用日志记录、配置和 DI 库

要创建主机,我们可以使用新的 HostBuilder,它具有与现有 WebHostBuilder 类似的一组方法和扩展。需要注意一个主要区别,那就是 HostBuilder 没有提供一个扩展方法,允许您像使用 WebHostBuilder 一样使用启动类。做出此决定主要是为了避免在幕后创建两个单独的 DI 容器的需要。使用通用主机,配置单个服务集合,然后用于构建最终的服务提供者。

使用ConfigureWebHostDefaults的原因是新主机构建器是通用主机构建器,因此重要的是要告诉我们,我们打算配置 Web 主机的默认设置.

请参阅建议使用通用主机的 Microsoft 引用 here

关于c# - asp.net core中Host类和WebHost类有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59745401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com