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

.NET Core 8整洁架构:工作单元与泛型仓储的DI问题排查

排查.NET Core 8中IUnitOfWork注入DI问题的步骤

1. 检查接口与实现类的定义

  • 确保IUnitOfWork是公共接口,其实现类(如UnitOfWork)为公共类,且完整实现接口的所有成员。
  • 确认实现类的构造函数无未注册的依赖,或存在DI容器可解析的构造函数(优先无参/依赖均已注册的构造函数)。

2. 验证DI容器的服务注册

  • 检查Program.cs中的注册代码,确保IUnitOfWork与实现类正确绑定:
    // 工作单元推荐用范围模式(Scoped)
    builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
    
  • 若UnitOfWork依赖泛型仓储,需提前注册泛型仓储服务:
    builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
    

3. 确认RestaurantsService的构造函数与注册

  • 确保RestaurantsService的构造函数为公共访问级别,且仅包含已注册的依赖:
    public class RestaurantsService
    {
        private readonly IUnitOfWork _unitOfWork;
    
        public RestaurantsService(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }
    }
    
  • 若RestaurantsService未注册到DI容器,补充注册:
    builder.Services.AddScoped<RestaurantsService>();
    

4. 排查循环依赖

  • 检查是否存在IUnitOfWork → 仓储 → RestaurantsService → IUnitOfWork的循环依赖链。若存在,可通过以下方式解决:
    • 用Lazy<T>延迟加载依赖
    • 重构代码拆分职责,打破循环

5. 解析Swagger报错信息

  • 提取报错中的核心内容(如Unable to resolve service for type 'IUnitOfWork' while attempting to activate 'RestaurantsService'),根据报错指向的类型,逐一核对该类型的注册状态与依赖链。

6. 验证工作单元的底层依赖

  • 若UnitOfWork依赖DbContext,需确保DbContext已正确注册:
    builder.Services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    

内容的提问来源于stack exchange,提问作者Mahmoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:57:11