Configurar o Unity DI para identidade do ASP.NET
Estou usando o Unity com êxito para todas as injeção regular de construtores, como repositórios etc., mas não consigo fazê-lo funcionar com as classes de identidade do ASP.NET. A configuração é esta:
public class AccountController : ApiController
{
private UserManager<ApplicationUser> _userManager { get; set; }
public AccountController(UserManager<ApplicationUser> userManager)
{
if (userManager == null) { throw new ArgumentNullException("userManager"); }
_userManager = userManager;
}
// ...
}
com estas configurações para o Unity:
unity.RegisterType<AccountController>();
unity.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
unity.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
É o mesmo que outras postagens aqui para Autofac, Ninject, por exemplo, mas não funciona no meu caso. A mensagem de erro é:
Ocorreu um erro ao tentar criar um controlador do tipo 'AccountController'. Verifique se o controlador possui um construtor público sem parâmetros. Obviamente, a criação manual funciona:
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>("Mongo")))
{
}
O que há de errado?
ATUALIZAR
Como sugerido por @emodendroket, encurtar o código para isso faz o truque. Não há necessidade do pacote Unity.Mvc.
unity.RegisterType<IUserStore<IdentityUser>,
MyCustomUserStore>(new HierarchicalLifetimeManager());
e
public AccountController(UserManager<IdentityUser> _userManager,
IAccountRepository _account)
{
// ...