微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何装饰 EF Core 的 DbContext

如何解决如何装饰 EF Core 的 DbContext

我正在尝试使用 scrutor 库装饰 DbContext,以便我可以将一些代码注入 SaveChanges()

我的装饰器看起来像这样:

public class DbContextDecorator : DbContext
{
  private readonly DbContext _context;

  public DbContextDecorator(DbContext context)
  {
    _context = context
  }

  public override int SaveChanges()
  {
    _context.SaveChanges();
    // some other code
  }
}

我正在使用它

builder.Services.Decorate(typeof(MyContext),typeof(DbContextDecorator));

但是,当我想在构造函数中或使用 MyContext 检索我装饰的 GetService<MyContext>() 时,它会永远挂起,看起来像是死锁或什么。

我也尝试将我的装饰器类更改为

public class DbContextDecorator<TContext> : DbContext where TContext : DbContext
{
  private readonly TContext _context;

  public DbContextDecorator(TContext context)
  {
    _context = context
  }
}

装饰得像

builder.Services.Decorate(typeof(MyContext),typeof(DbContextDecorator<MyContext>));

但它是一样的,这只是我认为可行的错误希望。

我是不是做错了什么,还是不可能以这种方式装饰 DbContext 而我需要为它创建接口?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。