2010-03-01 72 views
59

我正在开发我的MVC应用程序,我在想,控制器类的生命周期是什么?什么是ASP.NET MVC控制器的生命周期?

它什么时候被创建?单个控制器有多少个实例?局部变量的含义是什么?什么时候销毁?

我确定有一个很好的链接在互联网上浮动,但我的google-fu找不到它。

+0

Steve Sanderson制作了一张描绘MVC [请求处理管道](http://blog.stevensanderson。com/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipeline-poster /),你可能会感兴趣。 – 2010-03-01 11:13:10

回答

44

Stephen Walther在MVC框架处理请求的生命周期中拥有很棒的article

下面是从他的文章的顶部提取物,它接着详细介绍了每个步骤:

生命周期的步骤概述

有这种情况发生,当你五个主要步骤使从ASP.NET MVC网站的请求:

1. RouteTable创建

当ASP.NET应用程序第一次启动时,第一步只发生一次。 RouteTable将URL映射到处理程序。

2. UrlRoutingModule截获请求

这第二个步骤内,只要您拨打一个请求。 UrlRoutingModule拦截每个请求并创建并执行正确的处理程序。

3. MvcHandler执行

的MvcHandler创建的控制器,通过所述控制器的ControllerContext,并执行控制器。

4.控制器执行

控制器确定要执行哪个控制器的方法,建立的参数的列表,并且执行该方法。

5.的RenderView方法称为

典型地,控制器方法调用的RenderView()来呈现内容返回给浏览器。该Controller.RenderView()方法委托其对特定视图引擎

+0

Stephen Walther的文章链接无效了! – Hamed 2017-02-23 15:17:47

+1

这很难描述控制器的“寿命”。假设我想在创建控制器时启动事务,执行零个或多个操作,然后将这些操作作为一个单元提交。控制器是否被销毁?何时可以在某个操作出现问题时隐式调用“回滚”方法? – 2017-07-20 00:41:31

16

工作假设你没有更改默认ControllerFactory,控制器会为每个请求被创建和被收集的请求已完成“一段时间后”垃圾。

总之,你不需要担心实例变量的竞争条件(尽管你对静态变量显然是这样)。话虽如此,我建议为了更简洁的代码保持您的控制器动作可重入。