我想在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();
});
如果您使用AddDbContextPool,您应该查询所需的服务而不是注入它。
更多详情,可以参考以下代码:
public class ApplicationDbContext : IdentityDbContext
{
private readonly ILogger _logger;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options )
: base(options)
{
_logger = this.GetService<ILogger<ApplicationDbContext>>();
_logger.LogError("test");
}
}
结果: