行动是无国籍的,但控制者是无国籍的?

Dou*_*ain 7 c# asp.net-mvc

我认为我对MVC的一些理解存在致命缺陷.我一直认为控制器中的动作方法是无状态的,控制器本身是无状态的.

那么,每次调用任何动作时都会创建一个新的控制器实例吗?

Sim*_*ger 4

为每个传入的请求创建一个新的控制器实例。考虑一下:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return MoreIndex();
    }

    public ActionResult MoreIndex()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

传入的请求/Home/Index将输入两个操作,但只创建一个控制器。传入的请求/Home/MoreIndex将输入一个操作并创建一个控制器。现在没有什么可以阻止您手动创建控制器并使其保持活动状态并重新使用它。但它永远不会出现在来自 HTTP 的实际请求的上下文中。