.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
相关产品推荐
相关产品推荐

