ASP.NET控制器是否保证每个请求只使用一次?

时间:2009-11-04 16:55:17

标签: asp.net-mvc

如果我们想要创建一些控件中所有操作方法使用的对象,我们可以将它们作为实例变量存储在控制器中吗?

Phil Haack提到控制器不应该在这篇旧帖子中重复使用: Asp.Net MVC Beta: Previous RouteData overrides current RouteData?

但是这个单控制器每个请求的行为是否得到保证?

我不希望处于重用控制器来自另一个请求的数据的情况。

3 个答案:

答案 0 :(得分:4)

是(对于标题中的问题)和否(对于您帖子中的问题)。

为每个请求创建一个新的控制器实例。您可以通过使用自己的控制器工厂来执行此操作,该工厂可以缓存控制器并仅根据需要创建它们,但我不建议这样做。您最好只是缓存会话或缓存中所需的任何信息,或者将信息存储在视图中(隐藏,如果需要),而不是去创建新的控制器工厂。

答案 1 :(得分:1)

每次调用action方法时,都应该创建一个控制器类的新实例。因此,让您的操作方法依赖于实例变量并不是一个好主意。如果您使用DefaultControllerFactory,那么您将获得每个请求的新控制器实例。如果您使用自定义控制器工厂,则可以覆盖此行为,我不建议这样做。

答案 2 :(得分:0)

您可以使用TempData在控制器中存储临时数据