基于ABP Framework的依赖注入失败问题求助
问题分析与解决方案
核心问题:服务注册的循环依赖错误
你手动注册LessonParametersService的代码存在致命问题:
context.Services.AddSingleton<LessonParametersService>( sp => sp.GetRequiredService<LessonParametersService>() );
这段代码尝试通过服务提供者获取LessonParametersService实例来完成自身注册,会直接触发循环依赖死锁——服务容器创建该实例时会反复调用这个工厂函数,无限递归导致报错。
正确的服务注册方式
根据你的类结构,提供两种可行的注册方案:
方案1:自动解析构造函数依赖
只要OpenAIManager已注册为单例,容器会自动处理LessonParametersService的构造函数依赖,直接注册即可:
context.Services.AddSingleton<OpenAIManager>(); // 同时注册接口与实现类,方便后续通过接口注入 context.Services.AddSingleton<ILessonParametersService, LessonParametersService>(); // 若无需通过接口注入,也可仅注册实现类 // context.Services.AddSingleton<LessonParametersService>();
方案2:手动指定工厂(自定义实例逻辑时使用)
如果需要自定义实例创建流程,工厂函数应直接创建实例并传入依赖:
context.Services.AddSingleton<OpenAIManager>(); context.Services.AddSingleton<ILessonParametersService>(sp => new LessonParametersService(sp.GetRequiredService<OpenAIManager>()) );
额外排查点
- 确认
OpenAIManager的GetCompletion方法已正确实现,排查是否存在API密钥未配置、网络异常等内部错误,这也是getResult失效的常见原因。 - 调用
getResult时必须正确使用await,避免因异步操作未等待导致的异常或空结果。
内容的提问来源于stack exchange,提问作者AntiMatter
相关产品推荐
相关产品推荐

