ASP.NET Core依赖注入报错:AggregateException服务无法构造
问题分析与修复方案
问题根源
报错明确指出:尝试激活UserService时无法解析Password类型的服务。原因是你在DI容器中仅注册了IPassword接口与Password实现类的映射,但UserService的构造函数依赖的是Password具体类,而非IPassword接口,容器找不到该具体类的注册信息。
修复方案(推荐,符合依赖倒置原则)
修改UserService的构造函数,将依赖从具体类Password改为接口IPassword,保持现有DI注册不变即可:
// UserService类修改后的代码片段 public class UserService : IUserService { private readonly ApiContext _context; private readonly IPassword _password; // 改为IPassword接口类型 // 构造函数参数改为IPassword public UserService(ApiContext context, IPassword password) { _context = context; _password = password; if (_context.Users == null) throw new Exception(); } // 其余业务方法无需修改 }
备选方案(不推荐,耦合具体类)
如果坚持依赖Password具体类,在DI配置中添加该类的注册:
// Builder类的服务注册部分新增一行 builder.Services.AddScoped<IUserService, UserService>(); builder.Services.AddScoped<IPassword, Password>(); builder.Services.AddScoped<Password>(); // 新增:注册Password具体类
方案说明
依赖接口而非具体类是依赖注入的核心原则(依赖倒置),能降低代码耦合,方便后续替换IPassword的实现类(比如测试时用模拟实现),让代码更具扩展性。
内容的提问来源于stack exchange,提问作者Midorikawa
相关产品推荐
相关产品推荐

