ASP.NET MVC控制器的生命周期是多少?

Ala*_*tts 66 asp.net-mvc

我正在开发我的MVC应用程序,我在想,控制器类的生命周期是多少?

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

我确信互联网上有一个很好的链接,但我的google-fu找不到它.

Kie*_*ron 46

Stephen Walther 撰写了一篇关于MVC框架处理请求的生命周期的精彩文章.

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

生命周期步骤概述

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

1. RouteTable已创建

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

2. UrlRoutingModule拦截请求

无论何时提出请求,都会发生第二步.UrlRoutingModule拦截每个请求,并创建并执行正确的处理程序.

3. MvcHandler执行

MvcHandler创建一个控制器,向控制器传递一个ControllerContext,并执行控制器.

4.控制器执行

控制器确定执行哪个控制器方法,构建参数列表,并执行该方法.

5.调用RenderView方法

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

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

Ric*_*lay 21

假设您没有更改默认值ControllerFactory,将为每个请求创建控制器,并在"请求完成后"的某个时间进行垃圾收集.

简而言之,您不必担心实例变量的竞争条件(尽管您可以使用静态变量).话虽如此,为了更清晰的代码,我建议保持控制器操作可重入.