使用 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
我有以下 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