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)
{
// ...