DatabaseContext 类构造函数上的多个参数

问题描述 投票:0回答:1

我想在asp.net core中从DatabaseContext注入并使用ILogger。 我想使用上下文池来管理上下文。 但是,当我尝试注入两个依赖项(包括 Ilogger)时,出现以下错误。

“DatabaseContext”类型的 DbContext 无法池化,因为它没有接受 DbContextOptions 类型的单个参数的公共构造函数,或者具有多个构造函数。

如何注射

Ilogger

这是我的数据库上下文类构造函数

public class DatabaseContext : DbContext
{
    private readonly ILogger _logger;
 
    
    public DatabaseContext(DbContextOptions<DatabaseContext> options, ILogger<DatabaseContext> logger) : base(options)
    {
        _logger = logger;
    }
}

并在

program.cs

上设置数据库上下文池设置代码
builder.Services.AddDbContextPool<DatabaseContext>((provider,options) =>
{
    options.UseSqlServer(appConfiguration.GetConnectionString("DatabaseConnection"))
        .EnableSensitiveDataLogging()
        .EnableDetailedErrors();
});
c# entity-framework asp.net-core .net-core
1个回答
0
投票

如果您使用AddDbContextPool,您应该查询所需的服务而不是注入它。

更多详情,可以参考以下代码:

   public class ApplicationDbContext : IdentityDbContext
   {
       private readonly ILogger _logger;

       public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options )
           : base(options)
       {
           _logger = this.GetService<ILogger<ApplicationDbContext>>();
           _logger.LogError("test");
       }

   }

结果:

© www.soinside.com 2019 - 2024. All rights reserved.