You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Program.cs中HttpClient依赖注入失败引发System.AggregateException求助

解决System.AggregateException依赖注入错误

错误原因

你的HttpService依赖System.Net.Http.HttpClient,但DI容器中未注册HttpClient服务,导致激活HttpService时无法解析依赖,触发AggregateException。

解决方案

方法1:使用AddHttpClient注册HttpService(推荐)

ASP.NET Core提供AddHttpClient方法专门管理HttpClient的生命周期(避免手动注册导致的socket资源耗尽问题),同时自动为HttpService注入HttpClient:

替换你代码中的builder.Services.AddSingleton<HttpService>();为:

builder.Services.AddHttpClient<HttpService>();

该方法会将HttpService注册为Transient类型,并自动关联一个HttpClient实例。

方法2:手动注册HttpClient并注入到Singleton的HttpService

如果你需要保持HttpService的Singleton生命周期,可按以下步骤修改:

  1. 先注册HttpClient服务:
builder.Services.AddHttpClient();
  1. 注册HttpService时,从DI容器中获取HttpClient并传入构造函数:
builder.Services.AddSingleton<HttpService>(serviceProvider => 
    new HttpService(serviceProvider.GetRequiredService<HttpClient>())
);

额外检查项

  1. 确认HttpService的构造函数正确接收HttpClient参数,示例:
public class HttpService
{
    private readonly HttpClient _httpClient;

    public HttpService(HttpClient httpClient)
    {
        _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
    }

    // 你的业务方法
}
  1. 移除冗余的服务注册:你代码中同时注册了builder.Services.AddSingleton<ServiceName>();和builder.Services.AddSingleton<IServiceName, ServiceName>();,后者已足够实现接口与实现类的注入,前者可删除以避免冗余。

修改后的完整服务注册代码示例:

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
// 保留接口注册即可
builder.Services.AddSingleton<IServiceName, ServiceName>();
// 使用推荐的AddHttpClient注册HttpService
builder.Services.AddHttpClient<HttpService>();
builder.Services.AddDbContext<DbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DBConnection")));

内容的提问来源于stack exchange,提问作者CarGuyDan1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:46:13