.NET Core 3.0实现UnitOfWork时无法解析对应服务报错如何解决
问题根源
你在DI容器中仅注册了IUnitOfWork接口到UnitOfWork实现类的映射关系,但是CategoryController的构造函数直接依赖了具体的UnitOfWork类,容器中没有注册该具体类型的服务,因此触发解析失败报错:
InvalidOperationException: Unable to resolve service for type 'DataAccess.EF.UnitOfWork' while attempting to activate 'ShopAPI.Controllers.CategoryController'.
修复方案
有两种可选修复方式,推荐使用第一种符合依赖倒置原则的方案:
- 方案1:修改控制器构造函数的依赖类型为接口
IUnitOfWork
修改CategoryController的构造函数代码如下:
private readonly IUnitOfWork _unitOfWork; public CategoryController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; }
该方案和你现有DI注册逻辑完全匹配,不需要修改其他配置,同时符合面向接口编程的规范。
- 方案2:补充注册
UnitOfWork具体类型到DI容器
如果你确实需要依赖具体实现类,可以在Startup.cs的ConfigureServices方法中补充注册:
services.AddTransient<UnitOfWork>();
该方案会提高代码耦合度,不符合依赖注入最佳实践,不推荐使用。
额外优化建议
你现有ConfigureServices方法中重复调用了两次services.AddControllers(),仅需要保留带NewtonsoftJson配置的那一行即可,删除冗余的调用避免不必要的初始化逻辑:
// 保留此行即可 services.AddControllers().AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); // 删除下面这行重复的调用 // services.AddControllers();
内容的提问来源于stack exchange,提问作者Eduard
相关产品推荐
相关产品推荐

