Жизненный цикл контроллера ASP.NET MVC
Я понимаю, что конструктор для контроллера не вызывается во время каждого веб-запроса. Предполагая, что это так, каков жизненный цикл контроллера? Is "сконструирован" при запуске приложения, затем кэшируется и вызывается с запросомcontext, введенным в него с каждым веб-запросом?
Чтобы быть ясным, я не спрашиваю, как эмулировать поведение конструктора, я использую событие OnActionExecuting, чтобы инициировать действия, которые я обычно делал бы в конструкторе. Кроме того, я использую конструкторы на контроллерах для тестирования модулей и систем.
Спасибо!
Ответы
Ответ 1
Если вы используете контроллер по умолчанию factory, новый экземпляр будет создан для каждого запроса и будет таким, каким он должен быть. Контроллеры не должны делиться между различными запросами. Вы могли бы написать пользовательский factory, который управляет временем жизни контроллеров.
Ответ 2
Я боюсь, ваше понимание ошибочно. Контроллер (который должен быть очень тонким и легким классом и не должен иметь никакого состояния ожидания сеанса) фактически строится "на лету" для каждого веб-запроса. Как еще может быть экземпляр контроллера конкретным для определенного вида?
Таким образом, нет такой вещи, как "жизненный цикл" (кроме запроса)...
Ответ 3
Контроллер создается для каждого вашего запроса. Давайте возьмем пример.
public class ExampleController : Controller{
public static userName;
public void Action1(){//do stuff}
public void Action2(){//do stuff}
public void AssignUserName(string username){
userName = username;
}
public string GetName(){ return userName;}
}
Теперь вы можете вызвать контроллер из представления, передающего имя пользователя. Не надейтесь получить имя пользователя, которое вы задали в следующем запросе. он вернет null. Таким образом, для каждого запроса создается новый контроллер. Вы не создаете экземпляр контроллера в любом месте MVC, как вы устанавливаете объект из класса. Просто у вас нет указателя памяти объекта контроллера, чтобы вызывать его так же, как с другими объектами.
Перейдите по этой ссылке. Существует хорошее объяснение жизненного цикла контроллера MVC.
ASP.Net MVC - запрос жизненного цикла