不支持 Aspire 集成的 HostingStartup

Aspire 集成需要使用 IHostApplicationBuilder,但 HostingStartup 仅提供对 IWebHostBuilder 的访问权限。 这种基本不兼容性意味着您无法从HostingStartup实现中配置Aspire集成。

症状

尝试在 HostingStartup 实现中使用 Aspire 集成时,可能会遇到以下情况:

  • 编译错误: Aspire 集成扩展方法,如 AddNpgsqlDbContextAddRedis 不可用 IWebHostBuilder
  • 运行时配置问题:即使访问基础服务,也不会进行适当的配置和服务注册。
  • 缺少遥测和复原能力: Aspire不会应用内置的可观测性、运行状况检查和复原模式。

HostingStartup 为何不适用于 Aspire

Aspire 集成扩展 IHostApplicationBuilder 以提供:

  • 标准化配置模式。
  • 内置运行状况检查。
  • 遥测和可观测性。
  • 复原模式。
  • 服务发现集成。

此功能 HostingStartup 专为较旧的 ASP.NET Core 托管模型设计,仅提供访问权限 IWebHostBuilder,不包括这些新式托管功能。

从 HostingStartup 迁移

此功能HostingStartup表示早于需要的新式ASP.NET Core模式IHostApplicationBuilder的旧Aspire托管模型。 迁移是利用 Aspire集成和新式托管功能所必需的。

了解 API 更改

根本区别在于托管抽象:

之前(HostingStartup 模式):

using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

// MyDatabaseStartup.cs
public class MyDatabaseStartup : IHostingStartup
{
    public void Configure(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            // This won't work with Aspire integrations
            services.AddDbContext<MyDbContext>(options =>
                options.UseNpgsql("Host=localhost;Database=mydb;Username=user;Password=password"));
        });
    }
}

之后(新式托管模式):

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

// Example of modern hosting pattern that works with Aspire
public class ModernHostingExample
{
    public static void ConfigureServices()
    {
        // Program.cs equivalent
        var builder = WebApplication.CreateBuilder();

        // Add service defaults first
        // builder.AddServiceDefaults();

        // Now you can use Aspire integrations
        // builder.AddNpgsqlDbContext<MyDbContext>("postgres");

        var app = builder.Build();

        // app.MapDefaultEndpoints();
        // app.Run();
    }
}

关键概念性变更

HostingStartup 新式托管模型迁移到新式托管模型时,你将在这些方法之间移动:

旧模式 新式模式 益处
IWebHostBuilder IHostApplicationBuilder 访问新式托管功能和 Aspire 集成。
单独的启动类 Program.cs 配置 服务配置直接移动到应用程序的入口点,以便更好地清晰和调试。
手动服务注册 集成包 Aspire 集成会自动处理服务注册、配置、运行状况检查和遥测。

迁移资源

有关详细的迁移指南,请参阅:

其他注意事项

  • 服务发现: Aspire 集成会自动配置服务发现。 如果使用 HostingStartup 进行服务到服务通信,请考虑使用 Aspire“ 服务发现功能”。

  • 配置管理:不要在 HostingStartup 中对连接字符串进行硬编码,而应使用 Aspire 的配置模式以及对应映射到应用主机资源的连接字符串名称。

  • 测试: Aspire 提供使用新托管模型的 测试功能

有关集成和托管模型的详细信息 Aspire ,请参阅 Aspire 集成概述