Konfigurieren Sie Unity DI für ASP.NET Identity

Ich verwende Unity erfolgreich für alle regulären Konstruktorinjektionen wie Repositorys usw., kann es jedoch nicht mit den ASP.NET-Identitätsklassen zum Laufen bringen. Das Setup ist wie folgt:

public class AccountController : ApiController
{
    private UserManager<ApplicationUser> _userManager { get; set; }

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        if (userManager == null) { throw new ArgumentNullException("userManager"); }
        _userManager = userManager;
    }

    // ...
}

mit diesen configs für Unity:

unity.RegisterType<AccountController>();
unity.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
unity.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());

Dies ist das Gleiche wie bei anderen Posts hier für Autofac, z. B. Ninject, aber es funktioniert in meinem Fall nicht. Die Fehlermeldung lautet:

Beim Erstellen eines Controllers vom Typ 'AccountController' ist ein Fehler aufgetreten. Stellen Sie sicher, dass die Steuerung über einen parameterlosen öffentlichen Konstruktor verfügt. Manuelle Erstellung funktioniert natürlich:

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>("Mongo")))
{
}

Was ist los mit dir?

AKTUALISIEREN

Wie von @emodendroket vorgeschlagen, reicht eine Verkürzung des Codes aus. Das Unity.Mvc-Paket ist nicht erforderlich.

unity.RegisterType<IUserStore<IdentityUser>, 
  MyCustomUserStore>(new HierarchicalLifetimeManager());

und

public AccountController(UserManager<IdentityUser> _userManager,
  IAccountRepository _account)
{
    // ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage