Reputation: 39444
I have the following EntityFramework context:
public class Context : DbContext, IDbContext {
}
Where IDbContext is the following:
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
What is the correct way to configure DbContext injection with Autofac?
With StructureMap I had the following:
For<IDbContext>().Use(x => new Context());
Upvotes: 13
Views: 22639
Reputation: 2054
Assuming that your constructor expects to receive a DbContext factory Func<IDbContext>
so you'll be able to get new instances of DbContext on each call and dispose them on your own, you should use:
builder.RegisterType<Context>().AsImplementedInterfaces().InstancePerDependency().ExternallyOwned();
You might want to take a look at https://autofac.readthedocs.io/en/latest/resolve/relationships.html
Upvotes: 0
Reputation: 3214
Many ways, depending on scope you need, conventions etc.
Example:
containerBuilder
.RegisterType<Context>()
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
Upvotes: 17