2015-07-09 7 views
5

Sto utilizzando Asp.Net MVC 6 beta4 con pattern di repository.Come iniettare dipendenza di ApplicationDbContext nel repository MVC6

Nei miei Startup.cs ho someting in questo modo:

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

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

Nel mio controller posso ottenere la mia istanza di ApplicationDbContext con:

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

Ma non riesco a ottenere l'istanza di ApplicationDbContext nella mia implementazione di repository con questo codice di segmento self sopra.

Con MVC 5 Ho usato ServiceLocator nel mio Repository e prese l'ApplicaionDbContext così:

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

Come ottenere il grado delle ApplicationDbContext nel mio repository con Asp.NET MVC 6?

+2

Forse avete controllato questo? http://stackoverflow.com/questions/29332494/asp-net-vnext-dbcontext-dependency-injection-multiple-request-issues – Fals

+0

Arriverò! Grazie! –

+1

Perché si sta utilizzando l'iniezione di proprietà anziché l'iniezione del costruttore? –

risposta

4

Quello che si desidera è utilizzare AddScoped, e non AddTransient, in modo che il contesto venga pulito correttamente quando termina la richiesta.

È inoltre necessario aggiungere in realtà il contesto, non solo l'AddEntityFramework chiama ...

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

Quindi, nel mio deposito di injection verrebbe fatto dal costruttore? –

+0

@RenattoMachado - Non capisco cosa intendi .. se stai chiedendo se dovresti usare l'iniezione del costruttore, allora sì, dovresti ... a meno che non ci sia altro modo, quindi l'iniezione di proprietà sarebbe ciò che useresti .. ma utilizzare solo l'iniezione di proprietà come ultima risorsa. –

+0

Ho fatto quello che hai detto, ma ho ricevuto questo errore: "Nessun archivio dati è configurato. Configura un archivio dati eseguendo l'override di OnConfiguring nella classe DbContext o nel metodo AddDbContext durante l'impostazione dei servizi. –