Contructor EF7 con inyección de dependencia MVC6

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

Pregunta

Probando el nuevo framework MVC6 y EF7.

A menudo necesitamos el HttpContext en nuestras capas de base de datos. Para hacer esto en MVC6, simplemente tenemos un constructor DbContext que se ve así:

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

        public ApplicationDbContext(IHttpContextAccessor httpContextFactory=null)

y en nuestro Startup.cs registramos nuestro DI como tal:

services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();

Esto funciona perfecto ...

... hasta que no lo haga. Al ejecutar la aplicación, todo está bien y bien. Sin embargo, cuando necesito aplicar algunos cambios de modelo utilizando "dnx. Ef migration add" obtenemos un error "No se ha definido ningún constructor sin parámetros para este objeto".

Está bien, no hay problema. Por lo tanto, agregamos un constructur adicional sin parámetros, que solo queremos usar en el proceso de migración. Sin embargo, el proceso DI registra el constructor sin parámetros solo para que el objeto HttpContext nunca se pase.

Entonces, ¿cómo obtengo el modelo de ID predeterminado de MVC para usar a la fuerza mi constructor con el parámetro? ¿Y mantener el constructor sin parámetros para las migraciones?

Respuesta popular

La especificación de qué constructor llamar cuando se registra la clase no es compatible con el DI de fuera de la caja de ASP.NET básico (solo resuelve los tipos con un constructor público).

Podría usar una DI más avanzada para este propósito, es decir, hay una versión alpha2 de autofac disponible para ASP.NET 5 ("Autofac": "4.0.0.0-alpha2", "Autofac.Dnx": "4.0.0-alpha1" ).




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué