Constructeur EF7 avec injection de dépendance MVC6

asp.net-core-mvc c# dependency-injection entity-framework entity-framework-core

Question

Test des nouveaux frameworks MVC6 et EF7.

Nous avons souvent besoin de HttpContext dans nos couches de base de données. Pour faire cela dans MVC6, nous avons simplement un constructeur DbContext qui ressemble à ceci:

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {                  
        HttpContext _httpContext;                     
        public ApplicationUser CurrentUser { get; set; }                

        public ApplicationDbContext(IHttpContextAccessor httpContextFactory=null)

et dans notre Startup.cs, nous enregistrons notre DI comme suit:

services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();

Cela fonctionne parfaitement ...

... jusqu'à ce que ce ne soit pas le cas. Lors de l'exécution de l'application, tout va bien. Cependant, lorsque je dois appliquer des modifications de modèle à l'aide de "dnx. Ef migration, ajouter", nous obtenons une erreur "Aucun constructeur sans paramètre défini pour cet objet".

Ok, pas de problème. Nous ajoutons donc une construction supplémentaire sans paramètre, que nous souhaitons utiliser uniquement lors du processus de migration. Cependant, le processus DI enregistre uniquement le constructeur sans paramètre afin que l'objet HttpContext ne soit jamais transmis.

Alors, comment faire en sorte que le modèle DI par défaut de MVC utilise avec force mon constructeur avec le paramètre? et conserver le constructeur sans paramètre pour les migrations?

Réponse populaire

La spécification du constructeur à appeler lorsque la classe est inscrite n'est pas prise en charge par la DI prête à l'emploi ASP.NET de base (elle résout uniquement les types avec un constructeur public).

Vous pouvez utiliser une DI plus avancée à cet effet - c’est-à-dire qu’une version alpha2 d’autofac est disponible pour ASP.NET 5 ("Autofac": "4.0.0.0-alpha2", "Autofac.Dnx": "4.0.0-alpha1" )



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow