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

原文地址:https://www.cnblogs.com/Alicia-meng/p/15503174.html