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 为构建具有适当资源管理的健壮应用程序提供了强大的基础。