Pregunta La plantilla de Visual Studio 2013 MVC genera errores cuando se usa con Unity


Creé una nueva aplicación MVC5 en Visual Studio 2013 (vista previa) con la última versión de ASP.NET y Web Tools 2013 Preview Refresh (1.0.0-beta1). Noté que IdentityConfig.cs se ha ido, junto con los modelos de usuario que ahora forman parte del marco. Y IdentityStoreManager se presenta junto con IdentityAuthenticationManager en el AccountController predeterminado.

Cuando construyo y ejecuto el proyecto estándar, ¡todo funciona bien! Hasta ahora todo bien, sí!

Luego instalo Unity desde Nuget. Extraigo Unity y Unity.MVC (ambas versiones 3.0.1304.0). La instalación de estos paquetes da como resultado 3 referencias y 2 archivos de proyecto agregados (UnityConfig.cs y UnityMVCActivator.cs). No toco ningún archivo e intento ejecutar la aplicación web. La página de inicio se muestra bien, pero cuando voy a la página "Registrarse" o "Iniciar sesión", aparece un error. El AccountController que utiliza el nuevo modelo de identidad lanza la siguiente excepción (modificada):

El tipo IIdentityStoreContext no tiene un constructor accesible.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

[ResolutionFailedException: Falló la resolución de la dependencia, type = "Teamster.Web.Controllers.AccountController", name = "(none)".   La excepción ocurrió mientras: mientras se resolvía.

La excepción es: InvalidOperationException - el tipo IIdentityStoreContext no tiene un constructor accesible.

En el momento de la excepción, el contenedor era:

Resolviendo Teamster.Web.Controllers.AccountController, (ninguno)     Resolución del parámetro "storeManager" del constructor Teamster.Web.Controllers.AccountController (Microsoft.AspNet.Identity.EntityFramework.IdentityStoreManager storeManager, Microsoft.AspNet.Identity.EntityFramework.IdentityAuthenticationManager authManager)       Resolviendo Microsoft.AspNet.Identity.EntityFramework.IdentityStoreManager, (ninguno)       Resolución del parámetro "contexto" del constructor Microsoft.AspNet.Identity.EntityFramework.IdentityStoreManager (Microsoft.AspNet.Identity.IIdentityStoreContext context)         Resolviendo Microsoft.AspNet.Identity.IIdentityStoreContext, (ninguno)   ]

AccountController tiene un constructor sin perameterless, pero como la excepción es que el IIdentityStoreContext usado en el constructor AccountControllers es el problema para la unidad. IIdentityStoreContext está en el marco de identidad.

¿Cómo puedo solucionar esto? ¿Es posible resolver esto configurando el contenedor de Unity de alguna manera?

Para mayor claridad, aquí están los indicadores predeterminados de AccountController:

public AccountController() 
    {
        IdentityStore = new IdentityStoreManager();
        AuthenticationManager = new IdentityAuthenticationManager(IdentityStore);
    }

    public AccountController(IdentityStoreManager storeManager, IdentityAuthenticationManager authManager)
    {
        IdentityStore = storeManager;
        AuthenticationManager = authManager;
    }

5
2017-07-16 22:37


origen


Respuestas:


¡Un gran gracias! a imran_ku07 @ ASP.NET que resolvió mi problema.

Había olvidado por completo que Unity escoge el constructor con la mayoría de los parámetros por defecto si no especifico otherwhise. (Unity Framework IoC con constructor predeterminado)

Registré lo siguiente en Unityconfig y resolvió mi problema:

container.RegisterType<AccountController>(new InjectionConstructor());

9
2017-07-17 19:57