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

.NET升级后报Cannot resolve scoped service 'FluentValidation.IValidatorFactory'错误

问题根因定位
  1. 依赖注入生命周期不匹配
    Swagger生成器默认是Singleton生命周期,如果你自定义的Swagger Filter(包括OperationFilter、DocumentFilter等)的构造函数中注入了Scoped/Transient生命周期的服务,DI校验时就会抛出该异常,这是.NET Core 3.1+之后DI默认开启生命周期校验触发的典型问题。
  2. 组件版本不兼容
    你之前将私有NuGet依赖改为源码引用,且跨版本升级了.NET框架,但Swashbuckle.AspNetCore、FluentValidation相关的Swagger集成包版本没有和当前目标框架匹配,或是引用的源码组件中自带了Swagger Filter的注册逻辑,依赖的服务没有在主项目的DI容器中注册。
  3. FluentValidation Swagger集成配置遗漏
    你确认了FluentValidation本身配置正确,但如果使用了FluentValidation.AspNetCore.Swagger集成包,需要确保对应Filter依赖的FluentValidation服务已经正确注册,且版本匹配。
解决方案
  • 排查Swagger Filter的依赖注入生命周期
    找到所有注册的Swagger Filter(代码中AddSwaggerGen方法里AddOperationFilter、AddDocumentFilter等注册的自定义Filter),如果Filter的构造函数注入了Scoped服务,有两种修改方式:
    1. 修改Filter的服务获取逻辑,不从构造函数注入Scoped服务,改为从HttpContext中获取服务:
      public void Apply(OpenApiOperation operation, OperationFilterContext context)
      {
          // 从请求上下文获取Scoped服务
          var scopedService = context.HttpContext.RequestServices.GetRequiredService<你需要的Scoped服务类型>();
      }
      
    2. 临时关闭DI生命周期校验(仅用于验证问题,不建议长期开启):在Program.cs/Startup.cs的AddDefaultServiceProvider配置里设置ValidateScopes为false:
      Host.CreateDefaultBuilder(args)
          .UseDefaultServiceProvider(options =>
          {
              options.ValidateScopes = false;
          })
      
      关闭后如果不再报错,即可确认是生命周期不匹配导致的问题。
  • 统一所有项目的目标框架和依赖版本
    确保所有引用的项目(包括直接引用的源码组件)的目标框架统一为同一个版本(推荐统一升级到.NET 6 LTS),所有NuGet包(尤其是Swashbuckle.AspNetCore、FluentValidation、Microsoft.Extensions.*开头的包)的版本保持一致,避免不同项目引用不同版本的同一个包。
  • 检查源码组件的服务注册逻辑
    查看引用的源码组件中是否有自动注册Swagger Filter的逻辑,确认这些Filter依赖的服务是否已经在主项目的DI容器中完成注册,如有遗漏手动补全注册即可。
  • 临时移除Swagger相关配置验证问题
    先注释掉AddSwaggerGen、UseSwagger、UseSwaggerUI相关的配置,如果项目可以正常处理HTTP请求,即可确认问题完全出在Swagger相关配置上,再针对性排查即可。

内容的提问来源于stack exchange,提问作者Artur Michajluk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:03