代码之家  ›  专栏  ›  技术社区  ›  Josh Pearce

ASP.NET MVC控制器生命周期

  •  58
  • Josh Pearce  · 技术社区  · 16 年前

    据我所知,在每次web请求期间,不会调用控制器的构造函数。假设这是真的,那么控制器的生命周期是什么?是否在应用程序启动时“构造”,然后缓存并调用requestcontext,并随每个web请求一起注入其中?

    为了清楚起见,我不是在问如何模拟构造函数行为,我使用OnActionExecuting事件来启动通常在构造函数中执行的操作。此外,我在控制器上使用构造函数进行单元和系统测试。

    谢谢

    3 回复  |  直到 11 年前
        1
  •  90
  •   Darin Dimitrov    16 年前

    如果你使用 default controller factory 将为每个请求构造一个新实例,这就是它应该采用的方式。控制器不应在不同的请求之间共享。不过,您可以编写一个自定义工厂来管理控制器的生命周期。

        2
  •  15
  •   Thomas Weller    16 年前

    恐怕你的理解是错误的。实际上,为每个web请求动态构造一个控制器(它应该是一个非常精简和轻量级的类,并且不能有任何会话超出生存状态)。控制器实例如何才能特定于某个视图?

    所以不存在“生命周期”(除了请求的生命周期)之类的东西。。。

        3
  •  7
  •   Community Mohan Dere    9 年前

       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 - Request Life Cycle