2016-12-12 33 views
1

Я работаю с ninject, и у меня проблема с несколькими репозиториями и интерфейсами. Мне удалось сделать ninject для одного репо и одного интерфейса, но проблема возникает, когда я пытаюсь использовать другое репо с другим интерфейсом с тем же контекстом базы данных. Что такое решение для нескольких репозиториев и интерфейсов, которые используют тот же контекст базы данных?Ninject в ASP.NET MVC с двумя репозиториями

NinjectWebCommon.cs

private static void RegisterServices(IKernel kernel) 
    { 
     //First one is working 
     kernel.Bind<IBookingRepo>().To<BookingsRepo>(); 
     //I suppose it can not be here 
     kernel.Bind<IRestaurantRepo>().To<RestaurantRepo>(); 
    } 

второго хранилище

public class RestaurantRepo : IRestaurantRepo 
     { 
      //should i initialize second time db? 
      ApplicationDbContext db = new ApplicationDbContext(); 
     ... 
     } 
+0

Вы должны инъекционной свой ApplicationDbContext вместо создания нового экземпляра внутри вашего хранилище класса. –

ответ

1

Настройка ваша Ninject ядро, чтобы ввести один и тот же конкретный экземпляр ApplicationDbContext во всех хранилищах и изменить репозитории конструкторов получить экземпляр.

NinjectWebCommon.cs:

private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope(); 
     kernel.Bind<IBookingRepo>().To<BookingsRepo>(); 
     kernel.Bind<IRestaurantRepo>().To<RestaurantRepo>(); 
    } 

Вашего Хранилище:

public class RestaurantRepo : IRestaurantRepo 
{ 
    private readonly ApplicationDbContext _dbContext; 

    public RestaurantRepo(ApplicationDbContext dbContext) 
    { 
     _dbContext = dbContext; 
    } 
    //... 
}