我的理解是,在每个Web请求期间都不会调用控制器的构造函数.假设这是真的,控制器的生命周期是什么?是应用程序启动时"构造",然后使用每个Web请求注入的requestcontext进行缓存和调用吗?
为了清楚起见,我不是在问如何模拟构造函数行为,我使用OnActionExecuting事件来启动我通常在构造函数中执行的操作.另外,我确实在控制器上使用构造函数进行单元和系统测试.
谢谢!
Dar*_*rov 84
如果使用默认控制器工厂,将为每个请求构建一个新实例,这就是应该的方式.不应在不同请求之间共享控制器.您可以编写一个管理控制器生命周期的自定义工厂.
Tho*_*ler 13
我害怕,你的理解是错误的.控制器(应该是一个非常轻薄的类,并且不能具有任何会话超出状态)实际上是为每个Web请求动态构建的.控制器实例如何才能特定于某个视图?
所以没有"生命周期"这样的东西(除了请求之外)......
为您执行的每个请求创建一个控制器.让我们举个例子.
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;}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以从通过用户名的视图中调用控制器.不希望获得您在下一个请求中设置的userName.它将返回null.因此,对于每个请求,创建新的控制器.您不会在MVC中的任何位置实例化控制器,就像从类中实例化对象一样.只是你没有控制器对象内存指针来调用它,就像你对其他对象一样.
转到此链接.关于MVC控制器的生命周期有一个很好的解释.
| 归档时间: |
|
| 查看次数: |
29768 次 |
| 最近记录: |