目录
二、演进历程:从 WebHost 到 Generic Host
在 ASP.NET Core 中,.NET 通用主机(Generic Host) 是应用程序的启动入口和运行框架,无论是 Web 应用、后台任务服务,还是微服务进程,都提供了统一的构建和生命周期管理方式。
本文将围绕其基本概念、演进过程、核心组件及典型应用场景展开详细介绍。
一、什么是通用主机(Generic Host)?
通用主机由 Microsoft.Extensions.Hosting
提供,核心职责包括:
-
• 应用生命周期管理(启动、运行、停止)
-
• 内建依赖注入(DI)容器支持
-
• 配置系统(支持 JSON、环境变量、命令行等)
-
• 内置日志记录支持
-
• 支持后台服务(如
IHostedService
)
不仅服务于 ASP.NET Core,还适用于控制台程序、Windows 服务、Worker Service 等。
二、演进历程:从 WebHost 到 Generic Host
早期(.NET Core 2.x)
使用 WebHost
构建 Web 应用:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
现代(.NET Core 3.0+)
推荐统一使用 Generic Host
:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
极简模式(.NET 6+)
简化为一行 WebApplication.CreateBuilder(args)
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
该语法基于通用主机构建,简化了 Program.cs
,但本质仍是 HostBuilder
+ WebHostBuilder
的组合封装。
三、简化模型背后的机制
WebApplication.CreateBuilder(args)
实际执行了:
-
•
Host.CreateDefaultBuilder(args)
创建主机 -
• 自动注册:
-
• Kestrel 服务器
-
• 中间件管道
-
• MVC 控制器
-
• 日志、配置等核心服务
-
-
• 提供统一入口
builder.Services
,builder.Configuration
,builder.Logging
等扩展接口
因此,无需手动配置主机构建流程,也能获得完整的托管能力。
四、核心组成组件
1. IHost
表示通用主机实例,负责管理应用程序的生命周期。
await host.RunAsync(); // 启动主机
2. IHostBuilder
用于配置主机(服务、配置、日志、环境等):
Host.CreateDefaultBuilder()
.ConfigureServices((ctx, services) => { });
3. IHostedService
定义后台任务的标准接口,如定时任务、监听器等:
public class MyBackgroundService : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine("后台任务运行中...");
await Task.Delay(1000);
}
}
}
注册方式:
builder.Services.AddHostedService<MyBackgroundService>();
五、常见应用场景
场景 | 使用方式 |
Web API / MVC | 使用 |
后台任务服务 | 使用 |
Worker Service | 基于模板,构建微服务进程或系统守护任务 |
控制台程序 | 使用 |