当前位置: 首页 > news >正文

【C#】.net core 6.0 依赖注入常见问题之一,在构造函数使用的类,都需要注入到容器里,否则会提示如下报错,让DeepSeek找找原因,看看效果

🌹欢迎来到《小5讲堂》🌹
🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹
🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹

在这里插入图片描述

目录

  • 前言
  • 报错信息
  • 错误原因分析
    • 解决方案
      • 1. 确保 `LogAsyncTool` 已注册
      • 2. 检查 `LogAsyncTool` 的依赖
      • 3. 检查 `GlobalExceptionHandler` 的构造函数
      • 4. 检查命名空间和程序集引用
      • 5. 如果是泛型或特殊类型
    • 调试技巧
  • 相关文章

前言

最近从0开始搭建.net core 6.0的启动环境,顺便也熟悉下最小启动单元,
有时候时间久了,就容易忘记一些知识点和用法。
下面就是在构建最小启动单元时,一点一点东西往里面添加的时候出现的报错,
刚开始还有点懵逼,现在有AI来找原因特别容易,AI给出的信息真是醍醐灌顶,一语中的。
看看博主是如何使用DeepSeek找原因的?

报错信息

System.AggregateException:“
Some services are not able to be constructed
 (Error while validating the service descriptor 
 'ServiceType: ApiV2.Tool.GlobalExceptionHandler 
 Lifetime: Transient ImplementationType: ApiV2.Tool.GlobalExceptionHandler'
 : Unable to resolve service for type 'ToolV2.LogAsyncTool' 
 while attempting to activate 'ApiV2.Tool.GlobalExceptionHandler'.)

在这里插入图片描述

错误原因分析

这个错误表明在你的 C# 项目中,依赖注入(DI)系统无法解析 GlobalExceptionHandler 所需的 LogAsyncTool 服务。

  1. GlobalExceptionHandler 类在其构造函数中需要 LogAsyncTool 类型的参数
  2. 但你的 DI 容器中没有注册 LogAsyncTool 服务
  3. 或者 LogAsyncTool 本身也有依赖项无法解析

解决方案

1. 确保 LogAsyncTool 已注册

在你的 Startup.cs 或 Program.cs 中,确保已经正确注册了 LogAsyncTool 服务:

// 如果是 transient 生命周期
services.AddTransient<LogAsyncTool>();

// 或者如果是 singleton
services.AddSingleton<LogAsyncTool>();

// 或者如果有接口
services.AddTransient<ILogAsyncTool, LogAsyncTool>();

2. 检查 LogAsyncTool 的依赖

如果 LogAsyncTool 本身也有依赖项,确保这些依赖项都已注册:

// 例如,如果 LogAsyncTool 需要其他服务
services.AddTransient<ILoggerService, LoggerService>();
services.AddTransient<LogAsyncTool>();

3. 检查 GlobalExceptionHandler 的构造函数

确保 GlobalExceptionHandler 的构造函数正确声明了对 LogAsyncTool 的依赖:

public class GlobalExceptionHandler
{
    private readonly LogAsyncTool _logTool;
    
    public GlobalExceptionHandler(LogAsyncTool logTool)
    {
        _logTool = logTool;
    }
    
    // ... 其他代码
}

4. 检查命名空间和程序集引用

确保:

  • LogAsyncTool 类所在的程序集已被引用
  • 使用了正确的命名空间
  • 没有拼写错误

5. 如果是泛型或特殊类型

如果 LogAsyncTool 是泛型或特殊类型,可能需要特殊注册方式:

services.AddTransient(typeof(LogAsyncTool<>));

调试技巧

  1. 使用 TryAdd 方法可以避免重复注册问题:

    services.TryAddTransient<LogAsyncTool>();
    
  2. 检查所有相关类的访问修饰符是否为 public

  3. 使用 GetService 手动测试是否能解析服务:

    var provider = services.BuildServiceProvider();
    var service = provider.GetService<LogAsyncTool>();
    

按照这些步骤检查后,应该能解决这个依赖注入错误。如果问题仍然存在,可能需要检查更具体的项目结构。

相关文章

【C#】.net core 6.0 依赖注入常见问题之一,在构造函数使用的类,都需要注入到容器里,否则会提示如下报错,让DeepSeek找找原因,看看效果

【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录

【C#】合理使用DeepSeek相关AI应用为我们提供强有力的开发工具,在.net core 6.0框架下使用JsonNode动态解析json字符串,如何正确使用单问号和双问号做好空值处理

【C#】已经实体类和动态实体类的反射使用方法,两分钟回顾,码上就懂

【C#】使用vue3的axios发起get和post请求.net framework部署的API显示跨域

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法

【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

【C#】 SortedDictionary,查找字典中是否存在给定的关键字

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

【C#】约瑟夫原理举例2个代码实现

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀博主,可查看博主个人中心查看信息。

http://www.dtcms.com/a/106526.html

相关文章:

  • 绿盟1面-流量篇
  • GitHub与Gitee各是什么?它们的区别与联系是什么?
  • DeepSeek-R1 API:多场景赋能的智能语言模型
  • 1.4 基于模拟退火改进蛇算法优化VGG13SE网络超参数的故障诊断模型
  • 程序化广告行业(52/89):程序化创意深度剖析
  • Python自定义消费Kafka至HDFS
  • 记录学习的第十九天
  • JAVA学习小计之IO流02--字符流篇
  • TypeScript装饰器与元编程
  • 美军用通信技术调研
  • C++ 新特性 | C++ 11 | std::move
  • maven如何使用
  • 《UNIX网络编程卷1:套接字联网API》第4章 基本TCP套接字编程
  • 一周掌握Flutter开发--9. 与原生交互(下)
  • 04-08核心配置和映射配置文件解析
  • 14.主从Reactor+线程池模式,Connection对象引用计数的深入分析
  • 【UE5】发现意外的文件尾解决方法
  • 国产系统服务器识别不到stata盘
  • C语言--统计输入字符串中的单词个数
  • 前端新增数据,但数据库里没有新增的数据
  • k8s 污点常用操作
  • Qt进阶开发:QFileSystemModel的使用
  • Rust 开发提效神器:lombok-macros 宏库
  • 吴恩达深度学习复盘(5)神经网络的前向传播TesorFlow与NumPy实现比对
  • 【高并发内存池】第八弹---脱离new的定长内存池与多线程malloc测试
  • 【redis】redis实现红锁
  • 关于文化和软件技术的传承
  • resttemplate设置params
  • C++与Python初始化最小和最大整数
  • 多传感器融合SLAM中如何检验编写的Factor是否有效