首页 > 其他分享 >.net7(.net core) 依赖注入:从 AddSingleton 注册的类里面访问 AddScoped 的问题

.net7(.net core) 依赖注入:从 AddSingleton 注册的类里面访问 AddScoped 的问题

时间:2023-12-01 15:47:11浏览次数:27  
标签:core autofac AddSingleton OUC Services AddScoped ScheduleTasks net

记录一下以免忘记。

今天从NopCommerce开源项目里面把它的任务调度类拆出来到我的项目用的时候,发现报错,报错信息如下

Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: OUC.Services.ScheduleTasks.ITaskScheduler Lifetime: Singleton ImplementationType: OUC.Services.ScheduleTasks.TaskScheduler': Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.)
---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: OUC.Services.ScheduleTasks.ITaskScheduler Lifetime: Singleton ImplementationType: OUC.Services.ScheduleTasks.TaskScheduler': Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.
---> System.InvalidOperationException: Cannot consume scoped service 'OUC.Services.ScheduleTasks.IScheduleTaskService' from singleton 'OUC.Services.ScheduleTasks.ITaskScheduler'.

依赖注册的信息如下:

 

 

它在 TaskScheduler(单例注册)的构造函数中使用了 IScheduleTaskService ,而 IScheduleTaskService是用scoped注册的,我把这些代码拆到我的项目后,编译后运行竟然直接报错了,而它的却没有。

后来发现它默认用的是autofac,而我用的是.net core的依赖注入,然后github上有人对autofac这个bug进行了报告 https://github.com/autofac/Autofac.Extensions.DependencyInjection/issues/106

简单来说就是:autofac认为从单例的类访问scoped的类没问题,而.net core自带的依赖注入却不行

回到NopCommerce,它默认用的是autofac,而我项目没用,用的是.net core默认的。所以就报错了

 

标签:core,autofac,AddSingleton,OUC,Services,AddScoped,ScheduleTasks,net
From: https://www.cnblogs.com/Jerseyblog/p/17869824.html

相关文章

  • .net core(web api) 后台 +uniapp移动端自动更新
    移动端采用uniapp开发后台采用.netcore先到插件市场找到对应的插件  然后将插件安装到 然后在移动端项目pages.json"path":"uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update","style":{"app-plus":{"......
  • 从零开始的 dbt 入门教程 (dbt-core 基础篇)
    最近一直在处理数据分析和数据建模的事情,所以接触了dbt等数据分析的工具,国内目前对于dbt比较详细的资料不多,所以打算写四道五篇dbt相关的文章,本文属于dbt系列的第一篇,本篇主要阐述dbt一些基本概念,教会你如何配置dbt连接远端数据库,并运行你的第一个数据模型,那么本文开......
  • 通过.NET Core+Vue3 实现SignalR即时通讯功能
    .NETCore和Vue3结合使用SignalR可以实现强大的实时通讯功能,允许实时双向通信。在这个示例中,我们将详细说明如何创建一个简单的聊天应用程序,演示如何使用.NETCoreSignalR后端和Vue3前端来实现实时通讯功能。步骤1:准备工作确保你已经安装了以下工具和环境:.NETCore......
  • .net core 6 DEBUG环境下不注入的服务
    .netcore6中,如果有些服务不想在调试时启动,比如nacos及一些监听器,如果每次注释,难免会出错误。所以在Program.cs文件中写明,DEBUG环境下是不启动的:#ifDEBUG#else//Nacos服务发现注册builder.Services.AddNacosAspNet(builder.Configuration);//默认找"nacos"节//Nacos读取配......
  • .net core中实现服务自动发现
    .netcore中自带了依赖注入框架,asp.netcore或worker框架下可以直接使用,控制台程序可以通过加入Microsoft.Extensions.DependencyInjection程序包来支持。自带的di框架功能还行,但是一个不方便的地方是没有提供服务自动发现、注册的接口,稍微大的程序都是需要通过反射自己写一个发......
  • .Net Core 单元测试获取配置文件节点值
     单元测试类:ServiceProvider_serviceProvider;IConfiguration_config;[SetUp]publicvoidSetup(){_config=newConfigurationBuilder().Add(newJsonConfigurationSource{Path="appsettings.jso......
  • vue Vite3出现错误runtime-core.esm-bundler.js:6835 Uncaught TypeError: normalize
    原因是在引入Element-Plus的顺序在vue之前导致,重新调整下他们的顺序后,问题解决。importAppfrom'./App.vue'import{setupI18n}from'/@/i18n'import{setupRouter}from'/@/router'import{setupStore}from'/@/store'importbusfrom'/@......
  • 【HMS Core】帐号服务中登录图标字体如何改变
    ​ 【关键词】登录按钮、字体 【问题描述】APP需要分发到香港地区,登录按钮图标如何改成繁体字,文档里只有中英文。https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/dev-specifications-0000001050048916​ 【解决方案】这个按钮后面的文字部分是支持各......
  • 【HMS Core】帐号服务报错907135000
    ​【问题描述】集成华为帐号服务,AccountAuthService登陆时,返回错误码:907135000 【解决方案】参考文档中错误码说明如下:​https://developer.huawei.com/consumer/cn/doc/development/hmscore-common-References/error-code-0000001050045846请从以下几个方面排查:1、请检查......
  • 在idea中无法查看org.springframework.cglib.core.Signature.java 源码
    一、现象1.点击ideaDownloadSource,没有变化;ChouseSource也无济于事。2.打开下载的源码包,惊奇的发现确实没有对应的源码。3.问题发生在哪儿?原来是这些包原本不属于spring,spring在编译的时候直接修改了包名称。 ......