Come iniettare la dipendenza di ApplicationDbContext nel repository MVC6

asp.net-core-mvc asp.net-mvc entity-framework-core

Domanda

Sto usando Asp.Net MVC 6 beta4 con Pattern di deposito.

Nel mio Startup.cs ho qualcosa del genere:

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 nell'implementazione del mio repository con questo codice di segmento self sopra.

Con MVC 5 ho usato ServiceLocator nel mio repository e ho preso l'ApplicaionDbContext così:

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

Come ottenere l'istanza di ApplicationDbContext nel mio repository con Asp.NET MVC 6?

Risposta accettata

Quello che probabilmente si desidera è utilizzare AddScoped, e non AddTransient, in modo che il contesto venga ripulito correttamente al termine della richiesta.

È inoltre necessario aggiungere effettivamente il contesto, non solo le chiamate AddEntityFramework ...

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow