ZetCode

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 创建自定义后台服务。该服务将在后台持续运行。

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

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程