2014-11-19 4 views
-1

У меня есть класс, основанный на DbContext, и он генерируется автоматически дизайнером EF (в настоящее время используется база данных First). DbContext находится в собственной сборке под названием «Модель».Регистрация интерфейса с Autofac?

public partial class MyContext : DbContext {} 

У меня есть код в другом частичном классе и реализации интерфейса:

public interface IMyContext 
{ 
    int Commit(); 
    Task<int> CommitAsync(CancellationToken ct); 
} 

public partial class MyContext : IMyContext {} 

У меня также есть единица работы и общего хранилища. Эти классы находятся в другой separater сборки под названием «ДАЛ»

public interface IUnitOfWork<TContext> : IDisposable where TContext : IMyContext 
{ 
    int Commit(); 
    Task<int> CommitAsync(CancellationToken ct); 
} 

public interface IRepository<T> where T : class {} 

public abstract class Repository<TContext, T> : IRepository<T> where TContext : IMyContext where T : class, IEntity 

И, наконец, у меня есть свои услуги, которые находятся в еще один узел под названием «Услуги».

public class LoginService : BaseService, ILoginService 
{ 
    public LoginService(ILogService logService, 
         IUnitOfWork<IMyContext> unitOfWork) 
     : base(logService, unitOfWork) 
    { } 
} 

нужно регистрироваться IMyContext с Autofac:

builder.RegisterType(typeof(MyContext)) 
     .As(typeof(IMyContext)) 
     .InstancePerRequest(); 

Но если я вышеупомянутую регистрацию, я получаю сообщение об ошибке, что DbContext не известно. Это связано с тем, что у меня нет (и не хочу/нужна) ссылка на Entity Framework в моем проекте WebApi

Могу ли я зарегистрировать вышеуказанный интерфейс, не требуя ссылки на EF? Каковы альтернативы?

+0

Связанный: https://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven

ответ

0

Похоже, что ошибка связана с тем, что MyContext также не зарегистрирован как DbContext.

Альтернативой может быть то, что вы создаете Autofac module, который живет внутри вашей сборки DAL и отвечает за регистрацию, связанную с MyContext. Регистрация Autofac в вашем проекте WebApi теперь будет состоять в регистрации модуля в отличие от регистрации отдельных типов.

Это будет означать, что вам понадобится ссылка на Autofac в вашей сборке DAL. Кроме того, я не совсем знаком с более поздними версиями Autofac, поэтому я не уверен, что вы столкнетесь с проблемами, которые пытаются зарегистрировать область InstancePerRequest вне веб-проекта.

+0

В конечном итоге я удалил DbContext как ограничение и дополнительные методы для IMyContext, которые, в свою очередь, вызывают методы DbContext. –

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