在ASP.NET MVC应用程序中使用从OnAppStart触发的静态构造函数是否安全

本文关键字:静态 构造函数 安全 是否 OnAppStart MVC NET ASP 应用程序 | 更新日期: 2023-09-27 18:00:23

我正在使用静态构造函数初始化我的助手类及其基本信息。静态构造函数由Application_Start通过初始化实例来触发。

我之所以担心,是因为在其中一个构造函数中,我使用Entity框架从数据库中发出了一个对象的调用抓取。但返回的对象始终是null,我确信这是因为它在生命周期中过早启动(在EF完全完成之前)

所以我的问题是,这个解决方案体系结构安全吗?(以下简称Application_Start

public static void OnAppInit()
        {
            AppSettings AS = new AppSettings(); //Trigger static constructor
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GeneralConfig.OnAppStart();
            ElmahConfig EC = new ElmahConfig(); //Trigger static constructor
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AutoMapperConfig.Configure();
            ViewResourceHelper VRH = new ViewResourceHelper(); //Trigger static constructor
            ExceptionHelper EH = new ExceptionHelper(); //Trigger static constructor
            TestEnvironmentHelper.Init();
        }

在ASP.NET MVC应用程序中使用从OnAppStart触发的静态构造函数是否安全

建议不要在静态构造函数中进行任何严肃的工作。事实上,看看Eric Lippert最近的一系列关于静态构造函数的博客文章。在他最近的帖子中,他特别提到:

简而言之:静态构造函数应该用于快速初始化重要的静态数据,仅此而已

如果它来自埃里克·利珀特,我会说它就像金子一样好。

我建议使用Lazy<T>