Настройте Unity DI для удостоверения ASP.NET
Я успешно использую Unity для всех обычных внедрений конструктора, таких как репозитории и т. Д., Но я не могу заставить его работать с классами ASP.NET Identity. Настройка такова:
public class AccountController : ApiController
{
private UserManager<ApplicationUser> _userManager { get; set; }
public AccountController(UserManager<ApplicationUser> userManager)
{
if (userManager == null) { throw new ArgumentNullException("userManager"); }
_userManager = userManager;
}
// ...
}
с этими конфигами для Unity:
unity.RegisterType<AccountController>();
unity.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
unity.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
Это то же самое, что и другие публикации здесь для Autofac, например, Ninject, но в моем случае это не работает. Сообщение об ошибке:
Произошла ошибка при попытке создать контроллер типа AccountController. Убедитесь, что у контроллера есть открытый конструктор без параметров. Ручное создание работ конечно:
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>("Mongo")))
{
}
В чем дело?
ОБНОВИТЬ
Как предлагает @emodendroket, сокращение кода до этого делает свое дело. Нет необходимости в пакете Unity.Mvc.
unity.RegisterType<IUserStore<IdentityUser>,
MyCustomUserStore>(new HierarchicalLifetimeManager());
а также
public AccountController(UserManager<IdentityUser> _userManager,
IAccountRepository _account)
{
// ...