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

时间:2013-07-18 14:18:22

标签: c# asp.net-mvc

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

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