Aspire 集成需要使用 IHostApplicationBuilder,但 HostingStartup 仅提供对 IWebHostBuilder 的访问权限。 这种基本不兼容性意味着您无法从HostingStartup实现中配置Aspire集成。
症状
尝试在 HostingStartup 实现中使用 Aspire 集成时,可能会遇到以下情况:
-
编译错误: Aspire 集成扩展方法,如
AddNpgsqlDbContext或AddRedis不可用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 集成会自动处理服务注册、配置、运行状况检查和遥测。 |
迁移资源
有关详细的迁移指南,请参阅:
- 从 ASP.NET Core 5.0 迁移到 6.0。
- 从 ASP.NET Core 6.0 迁移到 7.0。
- 从 ASP.NET Core 7.0 迁移到 8.0。
- 从 ASP.NET Core 8.0 迁移到 9.0。
- David Fowl 的 ASP.NET Core 6.0 迁移指南 - 提供实用的迁移模式和示例
其他注意事项
服务发现: Aspire 集成会自动配置服务发现。 如果使用 HostingStartup 进行服务到服务通信,请考虑使用 Aspire“ 服务发现功能”。
配置管理:不要在 HostingStartup 中对连接字符串进行硬编码,而应使用 Aspire 的配置模式以及对应映射到应用主机资源的连接字符串名称。
测试: Aspire 提供使用新托管模型的 测试功能 。
有关集成和托管模型的详细信息 Aspire ,请参阅 Aspire 集成概述。