Comment injecter une dépendance de ApplicationDbContext dans le référentiel MVC6

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

Question

J'utilise Asp.Net MVC 6 beta4 avec Repository Pattern.

Dans mon Startup.cs, j'ai quelque chose comme ça:

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

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

Dans mon contrôleur, je peux obtenir mon instance de ApplicationDbContext avec:

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

Mais je ne peux pas obtenir l'instance de ApplicationDbContext dans mon implémentation de référentiel avec ce code d'auto-segment ci-dessus.

Avec MVC 5, j'ai utilisé ServiceLocator dans mon référentiel et pris ApplicaionDbContext comme suit:

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

Comment obtenir l'instance de ApplicationDbContext dans mon référentiel avec Asp.NET MVC 6?

Réponse acceptée

Ce que vous voulez probablement, c'est utiliser AddScoped, et non AddTransient, pour que le contexte soit nettoyé correctement à la fin de la demande.

Vous devez également ajouter le contexte, pas seulement les appels AddEntityFramework ...

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi