You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:45:03