1

我正在使用静态构造函数使用它们的基础信息来初始化我的辅助类。Application_Start通过初始化实例来触发静态构造函数。

我的担忧出现了,因为在其中一个构造函数中,我使用实体框架发出调用从数据库中抓取对象。但是返回的对象总是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();
        }
4

1 回答 1

2

不推荐在静态构造函数中做任何严肃的工作。事实上,请查看 Eric Lippert 最近关于静态构造函数的博客文章系列。在他的最新帖子中,他特别说:

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

如果它来自 Eric Lippert,我会说它和黄金一样好。

我推荐的替代方法是使用Lazy<T>.

于 2013-02-20T18:20:37.230 回答