使用 Autofac 注入 DbContext

Inject DbContext with Autofac

我有以下 EntityFramework 上下文:

public class Context : DbContext, IDbContext {
}

其中 IDbContext 如下:

public interface IDbContext {
  DbEntityEntry Entry(Object entity);
  IEnumerable<DbEntityValidationResult> GetValidationErrors();
  Int32 SaveChanges();
  Task<Int32> SaveChangesAsync();
  Task<Int32> SaveChangesAsync(CancellationToken cancellationToken);
  DbSet Set(Type entityType);
  DbSet<TEntity> Set<TEntity>() where TEntity : class;
} // IDbContext

使用 Autofac 配置 DbContext 注入的正确方法是什么?

使用 StructureMap 我有以下内容:

For<IDbContext>().Use(x => new Context());

多种方式,具体取决于您需要的范围、约定等。

示例:

containerBuilder
  .RegisterType<Context>()
  .AsImplementedInterfaces()
  .InstancePerLifetimeScope();

假设您的构造函数期望接收一个 DbContext 工厂 Func<IDbContext> 因此您将能够在每次调用时获取 DbContext 的新实例并自行处理它们,您应该使用:

builder.RegisterType<Context>().AsImplementedInterfaces().InstancePerDependency().ExternallyOwned();

你可能想看看https://autofac.readthedocs.io/en/latest/resolve/relationships.html