首页 > 其他分享 >.Net Core WebApi项目 Development模式下报错 System.InvalidOperationException 解决记录

.Net Core WebApi项目 Development模式下报错 System.InvalidOperationException 解决记录

时间:2024-07-10 11:44:44浏览次数:20  
标签:WebApi Core service IOptionsMonitor options 报错 scoped next IOptionsSnapshot

.Net Core WebApi项目 Development模式下报错

System.InvalidOperationException:“Cannot resolve scoped service 'Microsoft.Extensions.Options.IOptionsSnapshot`1[Infrastructure.OptionsSetting]' from root provider.”

 但是在Production模式下,运行正常

因为未设置的话,.net core会运行在Production模式

而Production模式下

options.ValidateScopes 默认值为false,

所以当启用

options.ValidateScopes = true;的时候

也可以看到该错误.

 

解决方法

1

最简单的解决方法,就是直接设置为

options.ValidateScopes = false,但这属于自欺欺人的感觉,屏蔽了错误提示而已.要求不高也可以,

2

IOptionsSnapshot改成IOptionsMonitor

 

  • IOptionsSnapshot

    • 生命周期:作用域服务(Scoped Service),每个作用域内都有一个实例。
    • 适用情况:适合需要动态配置并且根据请求或环境变化的情况,例如用户首选项或动态配置。
  • IOptionsMonitor

    • 生命周期:单例服务(Singleton Service),应用程序生命周期内只有一个实例。
    • 适用情况:适合静态配置或者不需要在每个请求范围内改变的配置

错误引发原因

全局注册了Options配置文件导致

 /// <summary>
 /// 用于全局注入配置文件
 /// </summary>
 public class OptionsMiddleware
 {
     private readonly RequestDelegate next;
     private readonly IOptionsSnapshot<OptionsSetting> _options;



     static readonly Logger Logger = LogManager.GetCurrentClassLogger();//声明NLog变量

     public OptionsMiddleware(RequestDelegate next, IOptionsSnapshot<OptionsSetting> setttings)
     {
         this.next = next;
         this._options = setttings;
     }
     public async Task Invoke(HttpContext context)
     {
         BaseImg.SetOptions(_options.Value);
         await next(context);
     }
 }

如果此处替换为IOptions或者IOptionsMonitor可以解决

原因是

IOptionsSnapshot 是一个作用域服务(scoped service),它在每个 HTTP 请求处理范围内都会创建一个新的实例。

IOptions<T> 是一个单例服务,它在应用程序生命周期内只实例化一次。

IOptionsMonitor也是单例模式

 

参考资料:

.NET Core: Cannot resolve scoped service 'Microsoft.Extensions.Options.IOptionsSnapshot...' from root provider

https://siderite.dev/blog/net-core-cannot-resolve-scoped-service.html

https://www.cnblogs.com/liuzeqi/p/14132325.html

https://stackoverflow.com/questions/65457511/net-5-ioptionssnapshot-cannot-resolve-scoped-service

 

 IOptionsMonitor

标签:WebApi,Core,service,IOptionsMonitor,options,报错,scoped,next,IOptionsSnapshot
From: https://www.cnblogs.com/MarsPanda/p/18293664

相关文章

  • mormot.core.threads--TSynThreadPool
    mormot.core.threads--TSynThreadPool{************面向服务器进程的线程池}TSynThreadPool=class;//前向声明TSynThreadPool类///定义了TSynThreadPool所使用的工作线程TSynThreadPoolWorkThread=class(TSynThread)protectedfOwner:TSynThreadPool;//......
  • Lbview调用python脚本报错:错误1667...无法导入指定的python模块
    前提注意:NILabVIEW2021(32位)Python3.9.10(32位)32位对应32位,64位同理,否则可能会报错报错的原因:LabVIEW中使用的Python环境与安装的Python包不匹配也就是说Labview中使用的是python版本安装的系统路径,而PyCharm使用的虚拟环境路径,它的包都是下载到项目文件夹内可......
  • MySQL导入数据库报错#1118 - Row size too large ( 8126). 的解决方法
    导入SQL文件时报错(在执行创建表或者增加字段时,发现rowsize长度过长,会导致出现以下错误)[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSEDmayhelp.Incurrentrowformat,BLOBprefix......
  • 一款EF Core下高性能、轻量级针对分表分库读写分离的解决方案
    前言今天大姚给大家分享一款EFCore下高性能、轻量级针对分表分库读写分离的解决方案,开源(ApacheLicense)的EFCore拓展程序包:ShardingCore。ShardingCore项目介绍ShardingCore是一款开源、简单易用、高性能、普适性,针对EFCore生态下的分表分库的扩展解决方案,支持EFCore2+......
  • 【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
    问题描述应用部署在AzureAppService中,访问DefaultURL,遇见SSL:WRONG_VERSION_NUMBER错误。RESTAPI工具调用时错误信息:writeEPROTO8936192:error:100000f7:SSLroutines:OPENSSL_internal:WRONG_VERSION_NUMBER:..\..\third_party\boringssl\src\ssl\tls_record.cc:231:......
  • 解析coredump文件
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、coredump是什么?二、操作步骤总结前言编写程序的时候可能会遇到coredump问题,如下方法可以解析dump,简单定位报错问题内核版本:5.10提示:以下是本篇文章正文内容,下面案例可供参考一、......
  • ASP.Net Core解读launchSettings.json
    一、环境目标框架:.NETCore3.1ASP.NETCore是一个全新的Web开发平台,微软在它上面构建了MVC、SingalR、GRPC、Orleans这样广泛使用的Web框架,我们先以MVC框架为例介绍利用ASP.NETCore构建项目的常见名词。这篇文章介绍启动配置文件launchSettings.json ASP.NET Core MVC项目......
  • Core WebAPI 中 Program.cs和Startup.cs认识 (高频考点)
    1.Program.cs认识publicclassProgram{publicstaticvoidMain(string[]args){//Build方法构建出一个web应用程序,然后去运行CreateWebHostBuilder(args)//调用下面的方法,返回一个IWebHostBuilder对象.Build()//用......
  • 创建vue2项目执行npm install -g @vue/cli报错 no such file or directory, mkdir '\
    第一步:查看默认全局安装路径。指令:npmconfiggetprefix我这里路径npmconfiggetprefixE:\NVM\nvm\node_global第二步:不存在这个路劲进行更换npmconfigsetprefix"D:\Develop\nodejs"nodejs里面有node_cachenode_globalnode_modules这些文件npmconfiggetpre......
  • .net core部署linux下载文件 文件为中文下载
    在项目中,需要下载模板,某个文件夹下有excel文件或者word等 文件名为中文的时候在linux服务器下载不了  如果直接写路由的话在windows下是可以直接访问的,但是core部署在linux上所以会有些不同第一种:写一个接口使用流下载[httpget("download")]publicasyncTask<FileResult......