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