在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();
}
建议不要在静态构造函数中进行任何严肃的工作。事实上,看看Eric Lippert最近的一系列关于静态构造函数的博客文章。在他最近的帖子中,他特别提到:
简而言之:静态构造函数应该用于快速初始化重要的静态数据,仅此而已
如果它来自埃里克·利珀特,我会说它就像金子一样好。
我建议使用Lazy<T>
。