Я пытаюсь создать пользовательский менеджер, который передается в контроллере, когда он вызывается, и у меня возникают проблемы с пониманием текущей реализации нового проекта MVC5 в C#.Параметры конструктора на действия контроллера
Вот реализация по умолчанию:
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
прежде всего, что в декларации для них:
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
Теперь из моего понимания SignInManager и UserManager получить создается, когда приложение получает создан для первого время в Startup.Auth.cs, которое выглядит следующим образом:
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
Итак, всякий раз, когда я вызываю UserManager, я получаю тот первый экземпляр, который был создан при первом запуске проекта.
У меня есть 2 вопроса. Вопрос 1 - это что-то, что я сказал выше, неправильно, и я неправильно понимаю, как работает MVC5?
Вопрос2: Как создаются и передаются контроллеры UserManager и SignInManager в контроллере? Где код, который создает этот первый экземпляр менеджера и передает его в контроллер? Я предполагаю, что это app.CreatePerOwnContext that does it
. Если да, могу ли я тогда просто создать своего собственного Менеджера, а затем зарегистрировать его с помощью Owin таким же образом и повторное использование во всем проекте? Будет ли мой код получать последние данные из базы данных, если я это сделаю, а не кешировать?
[Здесь статья] (http://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/), которая показывает шаг за шагом, как удалить локатор службы Если вы вместо этого используете инъекцию зависимостей. Если вы не используете DI, вы не сможете передать диспетчеру контроллеру, вместо этого вам придется обновить его в контроллере. – NightOwl888