.net 单例DataAccessLayer/Connetion,服务范围为;无法访问已释放的对象内存池

.net 单例DataAccessLayer/Connetion,服务范围为;无法访问已释放的对象内存池,.net,asp.net-core,dependency-injection,ado.net,connection-pooling,.net,Asp.net Core,Dependency Injection,Ado.net,Connection Pooling,我已经在.NETCore3.1中创建了一个web API。我的应用程序需要连接到多个数据库,而且数据事务量很大,因此我使用了ADO.NET: 我的serviceLayer生命周期已确定 我把他定义为辛格尔顿 我还实现了连接池 有时我会遇到无法访问已处置对象MemoryPool的异常。这是由于连接池还是由于服务生命周期的某些问题 我的想法是这可能是由于连接池不确定 我注册的服务: 公共静态无效注册表状态(IServiceCollection服务) { services.addScope(); }

我已经在.NETCore3.1中创建了一个web API。我的应用程序需要连接到多个数据库,而且数据事务量很大,因此我使用了ADO.NET:

  • 我的serviceLayer生命周期已确定
  • 我把他定义为辛格尔顿
  • 我还实现了连接池
  • 有时我会遇到无法访问已处置对象MemoryPool的异常。这是由于连接池还是由于服务生命周期的某些问题

    我的想法是这可能是由于
    连接池
    不确定

    我注册的服务:

    公共静态无效注册表状态(IServiceCollection服务)
    {
    services.addScope();
    }
    
    将服务注入控制器,然后将存储库注入服务,如下所示:

    公共进程更新服务(
    IPProductService产品服务,
    IConfigRepository\u配置存储库,
    IAnotherRepository\u IAnotherRepository)
    {
    这。_ConfigRepository=ConfigRepository;
    此.\u IAnotherRepository=\u IAnotherRepository
    }
    
    存储库limetime类似于

    services.AddTransient();
    services.AddSingleton();
    services.AddSingleton();
    
    DBConfig是一个基本上获取连接字符串的类

    公共类DBConfig:IDBConfigu
    {
    public void SetDbConnection(字符串ConnectionNAme,)
    {
    //基于连接名称获取连接字符串
    _ConnectionString=“ConnectionString”;
    }
    }
    公共类AnotherRepository:IAnotherRepository
    {
    公共IDBConfig dBConfig;
    公共另一个存储库(IDBConfiguration dBConfiguration)
    {
    this.dBConfiguration=dBConfiguration;
    这个.dBConfiguration.SetDbConnection(“TesConnec”);
    }
    …其他方法
    }
    
    连接字符串状

    "TesConnec": "data source=ServerName;initial catalog=DBname;user id=userID;password=pswd;Connection Timeout=180;Connection Lifetime=2000;Min Pool Size=1;Max Pool Size=100;Pooling=true;",
    

    请检查您的代码,该代码包含一些问题,例如:
    services.AddTransient()
    公共类DBConfig:IDBConfigu
    ,尝试修改代码。此外,尝试使用
    AddScoped()
    方法注册存储库和DBConfig。