.NET Core Web API依赖注入报错:无法解析IUserManagementService服务
.NET Core Web API依赖注入解析失败问题排查与解决
异常信息
System.InvalidOperationException: 尝试激活'Pwc.EMSWebapi.UserManagementController'时,无法解析类型为'Pwc.EMSWebapi.IUserManagementService'的服务。
调用栈
at lambda_method3(Closure, IServiceProvider, Object[]) at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
已尝试的服务注册方式
在Program.cs中尝试过以下几种注册方式:
- 方式1:
services.AddTransient<IUserManagementRepoitory, UserManagementRepoitory>(); services.AddTransient<IUserManagementService, UserManagementService>(); - 方式2:
services.AddScoped<IUserManagementService, UserManagementService>();
补充代码
控制器构造函数
public UserManagementController(IUserManagementService userManagementService) { this._userManagementService = userManagementService; //this.applicationUser = applicationUser; //this.user = user; }
服务构造函数
public UserManagementService(IUserManagementRepository userManagementRepoitory) { this._userManagementRepoitory = userManagementRepoitory; }
仓储构造函数
public UserManagementRepoitory(EMSDbContext bcDbContext, IUser user) { this.dbContext = bcDbContext; this.user = user; }
解决步骤
修正仓储接口拼写错误
注册代码中使用的接口名是IUserManagementRepoitory,但服务构造函数依赖的是IUserManagementRepository(末尾少了一个s),这是核心错误。修正注册代码中的接口名:services.AddTransient<IUserManagementRepository, UserManagementRepoitory>(); services.AddTransient<IUserManagementService, UserManagementService>();注册缺失的依赖项
仓储类UserManagementRepoitory依赖EMSDbContext和IUser,必须在Program.cs中完成这两个服务的注册:- 注册数据库上下文
EMSDbContext(以SQL Server为例):services.AddDbContext<EMSDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("YourConnectionStringName"))); - 注册
IUser的具体实现类(假设实现类为User):services.AddTransient<IUser, User>(); // 可根据业务需求替换为AddScoped或AddSingleton
- 注册数据库上下文
验证依赖链完整性
确保所有依赖项(IUser、EMSDbContext、IUserManagementRepository、IUserManagementService)都已正确注册,且接口与实现类的对应关系无误。
内容的提问来源于stack exchange,提问作者Anand Meena
相关产品推荐
相关产品推荐

