【问题标题】:Asp.Net Mvc controller static constructorAsp.Net Mvc 控制器静态构造函数
【发布时间】:2010-11-18 22:58:27
【问题描述】:

我正在尝试使用主控制器创建一个站点。它有两个构造函数 - 静态和无参数。按照规范,应该首先调用静态的,并且应该调用一次,以初始化类的静态成员,但它从来没有这样做过,这是为什么呢?如何为一些应从控制器访问的人员实现单一存储?

编辑: 我想我在尝试调试它时犯了一些错误,因为今天它按预期工作,静态构造函数在常规构造函数之前被调用一次。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    在 ASP.NET MVC 中为控制器使用静态构造函数并不常见。我不知道您到底想实现什么,但 global.asax Application_Start 似乎是执行应用程序初始化的更好地方。另外,控制器可访问的单个存储是什么意思?你不能使用HttpContext.CacheHttpContext.Application 对象来存储应用程序范围的东西(与会话相反)吗?它们还具有线程安全的优点,因此您无需同步对这些存储的访问。

    就静态控制器构造函数而言,它应该在默认构造函数之前调用,并且每个应用程序只调用一次,这是由 CLR 保证的。为此,它需要完全具有以下签名(私有,无返回类型,与包含类型相同的名称):

    public class HomeController: Controller
    {
        // This is the exact signature of a static constructor
        static HomeController()
        {
    
        }
    }
    

    【讨论】:

    • 1.我希望有一些信息结构可以初始化一次(类似于 const 但不完全是)。不希望每次都初始化这些结构。因为我只有读取操作,所以不需要同步。我知道我可以使用缓存和应用程序,但是这样我就可以让我的所有控制器看到这些结构并且不想这样做,因为我只会在一个中使用它们。我并不是说我的方法是正确的方法,所以如果有人可以为我的情况提供更好的解决方案,请这样做。
    • 2.我的静态构造函数签名与您编写的完全一样。我正在尝试调试它并在静态和普通构造函数中放置 2 个断点。普通构造函数在静态构造函数之前调用。任何想法为什么?
    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多