2013-04-10 2 views
2

Я пытаюсь реализовать общий репозиторий и единицу рабочих шаблонов в соответствии с этим tutorial. В дополнение к шаблонам я также использовал Ninject для инъекции зависимостей для моего веб-приложения.Реализация общего хранилища и единицы рабочих шаблонов

Конкретных привязок, которые я использовал здесь:

private static void RegisterServices(IKernel kernel) 
{ 
    kernel.Bind(typeof(IGenericRepository<>)) 
      .To(typeof(GenericRepository<>)).InSingletonScope(); 
    kernel.Bind<IUnitOfWork>() 
      .To<UnitOfWork>(); 
} 

Однако в соответствии с обучающим, мне нужно передать DbContext каждой собственности хранилища в моем UnitOfWork классе, так что все хранилище будет делиться только один DbContext экземпляром как здесь:

public GenericRepository<Course> CourseRepository 
{ 
    get 
    { 
     if (this.courseRepository == null) 
     { 
      this.courseRepository = new GenericRepository<Course>(context); 
     } 
     return courseRepository; 
    } 
} 

вопрос заключается в том, как я могу передать DbContext экземпляр (проживающий в UnitOfWork классе) к GenericRepository, когда экземпляр GenericRepository вводится Ninject? Я знаю о методе WithConstructorArgument, но я не могу использовать его в своих вызовах kernel.Bind, потому что в это время я не буду иметь доступ к экземплярам DbContext.

ответ

0

ИМХО ваша проблема не является проблемой зависимость разрешения инъекции, но экземпляр зависимостей при создании GenericRepository объекта (вам нужен конкретный экземпляр DbContext, который зависит от класса UnityOfWork, который разрешающего IGenericRepository)

Поэтому , Я бы рекомендовал вам использовать фабрику для создания экземпляров IGenericRepository.

Вы можете найти некоторые дополнительные детали here

+0

значит, что я должен связать 'IGenericRepository' к' RepositoryFactory' и пусть завод решить, какой конкретный репозиторий создать? – rexcfnghk