C# 动作是无状态的,但控制器是无状态的?

C# 动作是无状态的,但控制器是无状态的?,c#,asp.net-mvc,C#,Asp.net Mvc,我认为我对MVC的一些理解存在致命的缺陷。我一直假设控制器中的动作方法是无状态的,而控制器本身也是无状态的 那么,是否每次调用任何操作时都会创建控制器的新实例?对于传入的每个请求,都会创建控制器的新实例。考虑这一点: public class HomeController : Controller { public ActionResult Index() { return MoreIndex(); } public ActionResult M

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


那么,是否每次调用任何操作时都会创建控制器的新实例?

对于传入的每个请求,都会创建控制器的新实例。考虑这一点:

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

    public ActionResult MoreIndex()
    {
        return View();
    }
}

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

在控制器中有状态是完全合理的。我通常从公共控制器基类引用数据库连接。因此,MVC为每个请求创建一个新的控制器,并在最后正确地处理它。

是的,控制器是一个对象。。。IIS是一个按需服务器。操作后执行控制器对象将被释放。此页面包含您可能会发现有用的其他信息: