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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:44:58