.NET 6中MVC调用同解决方案Web API时依赖注入报错排查
以下是针对该问题的具体排查点:
服务注册不完整或错误
检查Web项目的Program.cs中是否正确注册了IAdminService与实现类AdminService的绑定关系。如果AdminService依赖HttpClient调用API,需使用AddHttpClient方式注册,而非普通的AddScoped/AddSingleton:// 正确的注册方式(依赖HttpClient时) builder.Services.AddHttpClient<IAdminService, AdminService>(client => { client.BaseAddress = new Uri("http://localhost:5000"); // API的基础地址 });若仅注册了
AdminService而未绑定IAdminService(如builder.Services.AddScoped<AdminService>()),但控制器中注入的是IAdminService,DI容器会无法匹配实现类。AdminService构造函数存在未注册的依赖
查看AdminService的构造函数,确认所有参数均已在DI容器中注册。例如:public class AdminService : IAdminService { private readonly HttpClient _httpClient; // 构造函数依赖HttpClient,需确保HttpClient已通过AddHttpClient或其他方式注册 public AdminService(HttpClient httpClient) { _httpClient = httpClient; } }若构造函数中包含其他自定义服务(如
IAnotherService),需确保该服务也已在Program.cs中完成注册。构造函数访问修饰符不正确
确认AdminService的构造函数是public修饰的。如果构造函数是private或protected,DI容器无法实例化该类,会抛出找不到合适构造函数的错误。依赖链中的服务未注册
若AdminService构造函数的参数本身依赖其他服务,需递归检查这些服务是否已注册。例如,若构造函数参数是自定义的ApiClient,而ApiClient又依赖IConfiguration,需确保ApiClient已注册到DI容器。注册时类型匹配错误
检查Program.cs中的注册代码,确认接口与实现类的类型未写错。例如,是否误将IAdminService绑定到了其他无关的实现类,或者拼写错误导致类型不匹配。
内容的提问来源于stack exchange,提问作者Abdi fatah

