.NET 6中GraphQL查询依赖注入报错:无法解析仓储服务
问题解决方案
错误根源
报错信息明确指出:激活ApplicationParameterBusiness时无法解析IApplicationParamaterRepository类型的服务。这是因为你仅注册了业务层接口IApplicationParameterBusiness,但业务层实现类ApplicationParameterBusiness的构造函数依赖了仓储层接口IApplicationParamaterRepository,而该仓储接口未在DI容器中注册对应的实现类。
解决步骤
注册仓储层服务
在Program.cs中添加仓储接口与实现类的注册代码,生命周期建议与业务层保持一致(如Scoped):// 注意:请替换为你实际的仓储实现类名称,同时检查接口名称拼写(错误信息中是IApplicationParamaterRepository,可能存在笔误) builder.Services.AddScoped<IApplicationParamaterRepository, ApplicationParamaterRepository>();若接口名称实际应为
IApplicationParameterRepository(疑似少写一个e),请修正拼写后再完成注册。校验业务层构造函数
确认ApplicationParameterBusiness的构造函数正确注入了仓储接口,且参数类型、名称无拼写错误:public class ApplicationParameterBusiness : IApplicationParameterBusiness { private readonly IApplicationParamaterRepository _repository; // 确保构造函数参数类型与注册的接口完全一致 public ApplicationParameterBusiness(IApplicationParamaterRepository repository) { _repository = repository; } // 其他业务逻辑方法... }优化异步调用(可选但推荐)
当前代码使用.Result同步等待异步方法,可能引发死锁问题。建议将GraphQL查询方法改为异步实现:[GraphQLDescription("Get ApplicationParameters")] public async Task<IQueryable<ApplicationParameterDTO>> GetApplicationParameter([Service] IApplicationParameterBusiness _applicationParameterBusiness, string appParamName) { var applicationParameterlist = await _applicationParameterBusiness.GetApplicationParameterByappParamName(appParamName); return applicationParameterlist.AsQueryable(); }
内容的提问来源于stack exchange,提问作者Abhishek_Singh_Rana
相关产品推荐
相关产品推荐

