【发布时间】:2010-11-18 22:58:27
【问题描述】:
我正在尝试使用主控制器创建一个站点。它有两个构造函数 - 静态和无参数。按照规范,应该首先调用静态的,并且应该调用一次,以初始化类的静态成员,但它从来没有这样做过,这是为什么呢?如何为一些应从控制器访问的人员实现单一存储?
编辑: 我想我在尝试调试它时犯了一些错误,因为今天它按预期工作,静态构造函数在常规构造函数之前被调用一次。
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-2
我正在尝试使用主控制器创建一个站点。它有两个构造函数 - 静态和无参数。按照规范,应该首先调用静态的,并且应该调用一次,以初始化类的静态成员,但它从来没有这样做过,这是为什么呢?如何为一些应从控制器访问的人员实现单一存储?
编辑: 我想我在尝试调试它时犯了一些错误,因为今天它按预期工作,静态构造函数在常规构造函数之前被调用一次。
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-2
在 ASP.NET MVC 中为控制器使用静态构造函数并不常见。我不知道您到底想实现什么,但 global.asax Application_Start 似乎是执行应用程序初始化的更好地方。另外,控制器可访问的单个存储是什么意思?你不能使用HttpContext.Cache 或HttpContext.Application 对象来存储应用程序范围的东西(与会话相反)吗?它们还具有线程安全的优点,因此您无需同步对这些存储的访问。
就静态控制器构造函数而言,它应该在默认构造函数之前调用,并且每个应用程序只调用一次,这是由 CLR 保证的。为此,它需要完全具有以下签名(私有,无返回类型,与包含类型相同的名称):
public class HomeController: Controller
{
// This is the exact signature of a static constructor
static HomeController()
{
}
}
【讨论】: