【问题标题】:ASP.NET: Custom MyLoggerProvider Singleton Service in Conflict with DbContextASP.NET:与 DbContext 冲突的自定义 MyLoggerProvider 单例服务
【发布时间】:2023-01-03 01:51:52
【问题描述】:

我创建了一个记录到数据库的自定义记录器。我面临的问题是,当我运行迁移时,AppDbContextMyLoggerProvider 服务之间存在冲突。问题似乎是由以下事实引起的:MyLoggerProvider 是单例服务,而 AppDbContext 服务是作用域服务。

如何解决此问题才能成功运行我的迁移?

Program.cs:

builder.Services.AddDbContext<AppDbContext>(options =>
{
    options.UseSqlite(builder.Configuration.GetConnectionString("AppDbConnection"));
});

builder.Services.AddLogging();
builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();

MyLoggerProvider.cs:

public class MyLoggerProvider : ILoggerProvider
{
    private readonly AppDbContext dbContext;
    private readonly LogLevel minLevel = LogLevel.Information;

    public MyLoggerProvider(AppDbContext dbContext)
    {
        this.dbContext = dbContext;
    }

    public ILogger CreateLogger(string categoryName)
    {
        return new MyLogger(minLevel, dbContext);
    }

    // rest of the code
}

MyLogger.cs:

public class MyLogger : ILogger
{
    private readonly AppDbContext dbContext;
    private readonly LogLevel minLevel;

    public MyLogger(LogLevel minLevel, AppDbContext dbContext)
    {
        this.minLevel = minLevel;
        this.dbContext = dbContext;
    }

    // rest of the code
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core


    【解决方案1】:

    如果问题与手动迁移有关并且您使用的是 EF Core。 当您处理多个 DbContext 时,需要指定要迁移到哪个 DbContext。

    Using multiple context types - Documentation

    Add-Migration InitialCreate -Context AppContext
    Add-Migration InitialCreate -Context MyLoggerProvider
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多