【问题标题】:How to inject ILogger into EFCore DbContext如何将 ILogger 注入 EFCore DbContext
【发布时间】:2017-09-17 01:10:30
【问题描述】:

我有带有 EFCore db 上下文的 .net 核心应用程序:

public class MyappDbContext : DbContext
{
    private ILogger<MyappDbContext> _logger;

    public MyappDbContext(DbContextOptions<MyappDbContext> options)
        : base(options)
    {
        // ???
    }
}

在启动类中我注册了上下文:

services.AddDbContext<MyappDbContext>(options => options.UseSqlServer(connectionString));

如何注入MyappDbContextILoggerILoggerFactory(创建记录器)?

【问题讨论】:

    标签: c# dependency-injection entity-framework-core


    【解决方案1】:

    您需要做的就是在上下文构造函数中添加一个ILoggerFactoryILogger 参数:

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

    【讨论】:

    • 您应该确定,您还有一个空的构造函数可以让 EF 数据库迁移工作。
    • 好吧 OP 已经有这个问题了,所以这真的是一个不同的问题。
    • 效果很好。与此同时,我创建了 IDbContextFactory。迁移使用 IDbContextFactory 来创建我的 dbContext。
    • @DavidG 当然,我只是认为这是一个很好的提及,因为这是 nr#1 犯了错误并在 SO 上提出了问题。
    • @JoelHarkes 嗯,这远不是第 1 位故障,我想说的甚至不在前 1000 位!
    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 2020-07-28
    • 2022-01-18
    • 2022-08-22
    • 1970-01-01
    • 2013-05-04
    • 2015-06-17
    • 2020-03-04
    相关资源
    最近更新 更多