ASP.NET MVC控制器生命周期

我的理解是控制器的构造函数在每个Web请求期间都不会被调用。 假设这是真的,控制器的生命周期是什么? 是应用程序启动时“构造”,然后caching和调用与每个Web请求注入到它的requestcontext?

只是要清楚,我不问如何模仿构造函数行为,我使用OnActionExecuting事件来启动我通常会在构造函数中执行的操作。 另外,我还使用控制器上的构造函数进行单元和系统testing。

谢谢!

如果您使用默认的控制器工厂,则会为每个请求构build一个新实例,这就是应该的方式。 控制器不应该在不同的请求之间共享。 你可以写一个自定义工厂来pipe理控制器的生命周期。

恐怕,你的理解是错误的。 一个控制器(它应该是一个非常轻薄的类,不能有任何会话退出状态)实际上是为每个Web请求而dynamic构build的。 一个控制器实例怎么可能特定于某个视图?

所以不存在“生命周期”(除了请求之外)…

每个请求都会创build一个控制器。 让我们举个例子。

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。 因此,对于每个请求都会创build一个新的控制器 你不需要在MVC中的任何地方实例化一个控制器,就像你从类中创build一个对象一样。 只要你没有控制器对象的内存指针来调用它就像你做其他对象一样。

转到此链接。 MVC控制器的生命周期有很好的解释。

ASP.Net MVC – 请求生命周期