ASP.NET MVC控制器的寿命是多长?


68

我正在开发我的MVC应用程序,我在想,控制器类的寿命是多长?

它何时创建?一个控制器有多少个实例?局部变量的含义是什么?它什么时候被破坏?

我确定互联网上的某个地方有个不错的链接,但是我的Google-fu找不到它。


史蒂夫·桑德森(Steve Sanderson)制作了一张不错的海报,描绘了您可能感兴趣的MVC请求处理管道
大卫·格伦

Answers:


46

Stephen Walther在MVC框架处理的请求的生命周期上有一篇很棒的文章

这是他文章顶部的摘录,继续详细解释了每个步骤:

生命周期步骤概述

当您从ASP.NET MVC网站发出请求时,将发生五个主要步骤:

1.创建路由表

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

2. UrlRoutingModule拦截请求

每当您提出请求时,就会发生第二步。UrlRoutingModule拦截每个请求,并创建并执行正确的处理程序。

3. MvcHandler执行

MvcHandler创建一个控制器,将该控制器传递给ControllerContext,然后执行该控制器。

4.控制器执行

控制器确定要执行的控制器方法,建立参数列表,然后执行该方法。

5.调用RenderView方法

通常,控制器方法调用RenderView()将内容呈现回浏览器。Controller.RenderView()方法将其工作委托给特定的ViewEngine


Stephen Walther的文章链接不再有效!
哈默德

7
这几乎不是控制器“寿命”的描述。假设我想在创建控制器时启动事务,执行零个或多个动作,然后将这些动作作为一个单元提交。控制器何时准确销毁?当其中一个操作出现问题时,何时可以隐式调用“ Rollback”方法?
Quarkly'7

25

假设您不更改默认值 ControllerFactory,将为每个请求创建控制器,并将在请求完成后的某个时候进行垃圾回收。

简而言之,您无需担心实例变量的竞争条件(尽管您显然需要静态变量)。话虽如此,为使代码更简洁,我建议您使控制器动作保持可重入状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.