我认为我对 MVC 的一些理解存在致命缺陷。我一直认为控制器中的操作方法是无状态的,而控制器本身是无状态的。
那么,每次调用任何操作时都会创建一个新的控制器实例吗?
我认为我对 MVC 的一些理解存在致命缺陷。我一直认为控制器中的操作方法是无状态的,而控制器本身是无状态的。
那么,每次调用任何操作时都会创建一个新的控制器实例吗?
为每个传入的请求创建一个新的控制器实例。考虑一下:
public class HomeController : Controller
{
public ActionResult Index()
{
return MoreIndex();
}
public ActionResult MoreIndex()
{
return View();
}
}
进来的请求/Home/Index
将输入两个动作,但只创建一个控制器。进来的请求/Home/MoreIndex
将进入一个动作并创建一个控制器。现在没有什么能阻止您手动创建控制器并使其保持活动状态并重新使用它。但它永远不会出现在来自 HTTP 的实际请求的上下文中。
在控制器中有状态是完全合理的。我通常从一个通用控制器基类引用我的数据库连接。出于这个原因,MVC 为每个请求创建一个新的控制器,并在最后正确处理它。