2015-04-10 3 views
6

У меня есть следующий EntityFramework контекст:Вводят DbContext с Autofac

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 

Что такое правильный способ настройки DbContext инъекции с Autofac?

С StructureMap я имел следующие:

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

ответ

11

Много способов, в зависимости от области, которую необходимо, конвенции и т.д.

Пример:

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

Горгоны: Есть ли причина для использования AsImplementedInterfaces() вместо указания интерфейса, например, As ? И почему бы не использовать InstancePerRequest()? Спасибо. –

+5

Указание интерфейса (я) явно не является корректным. Это вопрос вкуса, условностей, дисциплины и т. Д. (Я предпочитаю автоматы с условностями). InstancePerRequest() отлично, если вы строго в веб-контексте, но не будете работать иначе. InstancePerLifetimeScope() предполагает, что вы знаете о масштабах и сами контролируете его (например, создавайте по одному в потоке в пакетном задании). –

Смежные вопросы