2015-04-10 16 views
6

Tôi có sau EntityFramework bối cảnh:Tiêm DbContext với Autofac

public class Context : DbContext, IDbContext { 
} 

đâu IDbContext như sau:

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 

cách chính xác để cấu hình tiêm DbContext với Autofac là gì?

Với StructureMap tôi đã có sau:

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

Trả lời

11

Nhiều cách, tùy thuộc vào phạm vi mà bạn cần, công ước, vv

Ví dụ:

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

Gorgon: Có một lý do cho việc sử dụng AsImplementedInterfaces() thay vì chỉ định giao diện, ví dụ như, ? Và tại sao không sử dụng InstancePerRequest()? Cảm ơn bạn. –

+5

Chỉ định giao diện rõ ràng là tốt. Đó là một vấn đề về hương vị, quy ước, kỷ luật, vv (tôi thích những thứ tự động với các quy ước). InstancePerRequest() là tốt nếu bạn đang hoàn toàn trong một bối cảnh web, nhưng sẽ không làm việc khác. InstancePerLifetimeScope() giả sử bạn nhận thức được phạm vi và kiểm soát nó bằng một số nghĩa là chính bạn (ví dụ: tạo một cho mỗi chủ đề trong một công việc hàng loạt). –

Các vấn đề liên quan