AspNet Identity e IoC Container Unity
Vediamo come utilizzare nella stessa applicazione web AspNet Identity e Unity. Lanciando la nostra applicazione senza settare niente otteniamo infatti questo errore
Osservando i dettagli possiamo capire che si tratta di un errore in fase di creazione dell'AccountController. Unity seleziona infatti, in mancanza di altre direttive, il costruttore con il maggior numero di parametri e nel nostro caso non riesce a risolvere tutti i tipi necessari.
Come fare? Aprire il file App_Start\UnityConfig.cs e sostituire le direttive di using con le seguenti:
using System; using System.Data.Entity; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.Configuration; using HireMeNow.Data.Models.Repository; using HireMeNow.Web.Models; using Microsoft.Owin.Security; using System.Web; using MyWebSite.Web.Controllers;
Inoltre all'interno del metodo statico RegisterTypes resistrare i tipi:
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(); container.RegisterType<UserManager<ApplicationUser>>(); container.RegisterType<DbContext, ApplicationDbContext>(); container.RegisterType<ApplicationUserManager>(); container.RegisterType<AccountController>(new InjectionConstructor());
In particolare l'ultima riga (con InjectionConstructor) serve per specificare quale costruttore utilizzare in fase di creazione di un AccountController, nel nostro caso quello senza parametri.