zoukankan      html  css  js  c++  java
  • Cannot resolve scoped service from root provider

    一、环境

    .NET Core 3.1,在Singleton生命周期的类中引用了Scoped生命周期的类,报错Cannot resolve scoped service from root provider。

     1     /// <summary>
     2     /// 单例模式
     3     /// </summary>
     4     public class Test
     5     {
     6         private readonly IUserService _userService;//Scoped模式
     7         public Test(IUserService userService)
     8         {
     9             10             11             _userService = userService;
    12         }
    13     }

    二、解决过程

    1、在Program.cs里将禁用验证Scope的服务是否被错误使用。

    1 public static IHostBuilder CreateHostBuilder(string[] args) =>
    2             Host.CreateDefaultBuilder(args)
    3                 .ConfigureWebHostDefaults(webBuilder =>
    4                 {
    5                     webBuilder.UseStartup<Startup>();
    6                 }).UseDefaultServiceProvider(options =>
    7                 {
    8                     options.ValidateScopes = false;
    9                 });

    这样解决的话算是不承认自己错了呗!

    2、从IApplicationBuilder中获取IUserService

     1     /// <summary>
     2     /// 单例模式
     3     /// </summary>
     4     public class Test
     5     {
     6         private readonly IUserService _userService;
     7 
     8         public Test(IApplicationBuilder app)
     9         {
    10             var scope = app.ApplicationServices.CreateScope();
    11             _userService = scope.ServiceProvider.GetRequiredService<IUserService>();
    12         }
    13     }    

    三、说明

    一般情况下,生命周期较长的服务不应该依赖一个生命周期较短的服务,Scope的服务被Singleton的服务依赖/引用,那么这个Scope的服务也会随依赖它的Singleton服务变成Singleton的。

    四、参考资料

    https://my.oschina.net/u/4401036/blog/3713739

  • 相关阅读:
    mybatis设置select返回HashMap,字段值为null时,不会保存key
    copyProperties 忽略null值字段
    动态新增表单
    页面时时刷新数据
    FormData 传List对象集合到后台
    linux常用命令总结
    Linux部署安装JDK
    yum安装nginx
    01_Python基础
    Nginx防盗链
  • 原文地址:https://www.cnblogs.com/liuzeqi/p/14132325.html
Copyright © 2011-2022 走看看