【问题标题】:What is the lifetime of a ASP.NET MVC Controller?ASP.NET MVC 控制器的生命周期是多少?
【发布时间】:2010-03-01 10:32:52
【问题描述】:

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

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

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

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

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() 方法将其工作委托给特定的 ViewEngine

【讨论】:

  • Stephen Walther 的文章链接失效了!
  • 这几乎不是控制器“生命周期”的描述。假设我想在创建控制器时启动事务,执行零个或多个动作,然后将动作作为一个单元提交。确切地说,控制器何时被销毁?当其中一个操作出现问题时,何时可以隐式调用“回滚”方法?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多