2016-12-12 2 views
1

Ich arbeite mit Ninject und ich habe Probleme mit mehreren Repositories und Schnittstellen. Ich habe es geschafft, Ninject für ein Repo und eine Schnittstelle zu machen, aber ein Problem tritt auf, wenn ich versuche, ein anderes Repo mit einer anderen Schnittstelle mit demselben Datenbankkontext zu ninjizieren. Was ist eine Lösung für mehrere Repositorys und Schnittstellen, die denselben Datenbankkontext verwenden?Ninject in ASP.NET MVC mit zwei Repositories

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>(); 
    } 

zweiten Verwahrungsort

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

Sie sollten Ihre ApplicationDbContext injizieren, anstatt eine neue Instanz in Ihrem Repository Klasse erstellen. –

Antwort

1

Konfigurieren Sie Ihren Ninject Kernel die gleiche konkrete Instanz ApplicationDbContext in allen Repositories und ändern Sie Ihre Repositories Konstrukteure erhalten die Instanz zu injizieren.

NinjectWebCommon.cs:

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

Ihre Repositorys:

public class RestaurantRepo : IRestaurantRepo 
{ 
    private readonly ApplicationDbContext _dbContext; 

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