2015-07-09 14 views
5

Używam Asp.Net MVC 6 beta4 z wzorcem repozytorium.Jak wstrzyknąć zależność ApplicationDbContext w repozytorium MVC6

W moich Startup.cs mam cos takiego:

services.AddEntityFramework() 
       .AddSqlServer() 
       .AddDbContext<ApplicationDbContext>(options => 
         options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); 

//Dependency Injection 
services.AddTransient<IProductRepository, ProductRepository>(); 

W moim kontrolera mogę dostać moje wystąpienie ApplicationDbContext z:

[FromServices] 
public ApplicationDbContext DbContext { get; set; } 

Ale nie mogę uzyskać instancję ApplicationDbContext w mojej implementacji repozytorium z powyższym kodem własnego segmentu.

z MVC 5 ServiceLocator użyłem w moim repozytorium i wziął ApplicaionDbContext tak:

var context = ServiceLocator.Current.GetInstance<ApplicationDbContext>() 

Jak zdobyć instancji ApplicationDbContext w moim repozytorium z ASP.NET MVC 6?

+2

Czy sprawdziłeś to? http://stackoverflow.com/questions/29332494/asp-net-vnext-dbcontext-dependency-injection-multiple-request-issues – Fals

+0

Przybędę! Podziękować! –

+1

Dlaczego używasz wtrysku właściwości zamiast wstrzyknięcia konstruktora? –

Odpowiedz

4

Najprawdopodobniej użyjesz opcji AddScoped, a nie AddTransient, aby kontekst został poprawnie uporządkowany po zakończeniu żądania.

Trzeba także dodać rzeczywiście kontekstu, nie tylko wywołuje AddEntityFramework ...

services.AddScoped<IProductRepository, ProductRepository>(); 
services.AddScoped<ApplicationDbContext, ApplicationDbContext>(); 
+0

Tak więc w moim repozytorium wtrysku byłby konstruktor? –

+0

@RenattoMachado - Nie rozumiem, co masz na myśli .. jeśli pytasz, czy powinieneś używać zastrzyku konstruktora, to tak, powinieneś ... chyba że nie ma innej drogi, wtedy zastrzyk własności byłby tym, czego używałbyś .. ale używaj tylko wtrysku nieruchomości w ostateczności. –

+0

Zrobiłem to, co powiedziałeś, ale dostałem ten błąd: 'Żadne magazyny danych nie są skonfigurowane. Skonfiguruj magazyn danych przez przesłonięcie OnConfiguring w swojej klasie DbContext lub w metodzie AddDbContext podczas konfigurowania usług. " –

Powiązane problemy