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生命周期,可按以下步骤修改:
- 先注册
HttpClient服务:
builder.Services.AddHttpClient();
- 注册
HttpService时,从DI容器中获取HttpClient并传入构造函数:
builder.Services.AddSingleton<HttpService>(serviceProvider => new HttpService(serviceProvider.GetRequiredService<HttpClient>()) );
额外检查项
- 确认
HttpService的构造函数正确接收HttpClient参数,示例:
public class HttpService { private readonly HttpClient _httpClient; public HttpService(HttpClient httpClient) { _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient)); } // 你的业务方法 }
- 移除冗余的服务注册:你代码中同时注册了
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
相关产品推荐
相关产品推荐

