ASP.NET жизненный цикл контроллера MVC



насколько я понимаю, конструктор для контроллера не вызывается во время каждого веб-запроса. Предполагая, что это правда, каков жизненный цикл контроллера? Is "построен" при запуске приложения, затем кэшируется и вызывается с помощью requestcontext, вводимого в него с каждым веб-запросом?



просто чтобы быть ясным, я не спрашиваю, как эмулировать поведение конструктора, я использую событие OnActionExecuting для инициирования вещей, которые я обычно делаю в конструкторе. Кроме того, я использую конструкторы на контроллерах для модульного и системного тестирования.



спасибо!

642   3  

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-запрос жизненного цикла

Comments

    Ничего не найдено.