行为是无状态的,但控制器是无状态的吗?

7

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

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


2
是的,控制器是一个对象... IIS 是一个按需服务器。在操作执行后,控制器对象将被处理。 - YD1m
2个回答

4
每个请求都会创建一个新的控制器实例。请考虑以下内容:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return MoreIndex();
    }

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

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


1
此页面包含您可能会发现有用的其他信息:http://blog.christopheargento.net/2012/06/11/detailed-life-cycle-of-an-asp-net-mvc-request/ - Richard Ev

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接