ASP.NET Host
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Host。Host 负责应用程序的启动、生命周期管理和依赖注入配置。
ASP.NET 应用程序构建在 Host 抽象之上,它提供了一种配置和运行应用程序的一致方式。Host 管理应用程序所需的资源和服务。
基本定义
ASP.NET 中的 Host 是一个封装应用程序资源和服务的容器。它处理应用程序的启动、配置和生命周期管理。
ASP.NET 中有两种主要的 Host 类型:Web Host(旧版)和 Generic Host。Generic Host 推荐用于 .NET 8 中的所有应用程序类型,包括 Web 应用程序。
Host 自动提供依赖注入、日志记录、配置和其他服务。它遵循构建器模式进行配置。
ASP.NET Host 示例
以下示例演示了如何使用 ASP.NET Host 创建自定义后台服务。该服务将在后台持续运行。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
services.AddHostedService<WorkerService>();
services.AddSingleton<IMessageService, MessageService>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.Build();
await host.RunAsync();
public class WorkerService : BackgroundService
{
private readonly IMessageService _messageService;
private readonly ILogger<WorkerService> _logger;
public WorkerService(IMessageService messageService,
ILogger<WorkerService> logger)
{
_messageService = messageService;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Worker service starting");
while (!stoppingToken.IsCancellationRequested)
{
var message = _messageService.GetMessage();
_logger.LogInformation("Processing: {Message}", message);
await Task.Delay(1000, stoppingToken);
}
_logger.LogInformation("Worker service stopping");
}
}
public interface IMessageService
{
string GetMessage();
}
public class MessageService : IMessageService
{
private int _counter = 0;
public string GetMessage()
{
return $"Message {++_counter} at {DateTime.Now:HH:mm:ss}";
}
}
此示例创建了一个持续运行的后台工作服务。Host 已配置了依赖注入和日志记录服务。
CreateDefaultBuilder 方法设置了常见的默认设置,例如配置源和日志记录提供程序。然后我们添加自定义服务。
WorkerService 继承自 BackgroundService 并实现了长期运行的操作。它展示了对自定义服务和日志记录等框架服务的构造函数注入。
MessageService 是一个生成消息的简单服务。它被注册为单例,以在工作执行之间保持状态。
运行时,此应用程序将持续记录消息,直到停止。Host 在中断时管理服务生命周期和正确关闭。
来源
Microsoft ASP.NET Generic Host 文档
在本文中,我们探讨了 ASP.NET 8 中的 Host。Host 为构建具有适当资源管理的健壮应用程序提供了强大的基础。