1

静的コンストラクターを使用して、基本情報でヘルパー クラスを初期化しています。Application_Start静的コンストラクターは、インスタンスを初期化することによってトリガーされます。

これらのコンストラクターの 1 つで、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();
        }
4

1 に答える 1

2

静的コンストラクターで重大な作業を行うことは、推奨される設計ではありません。実際、静的コンストラクターに関する Eric Lippert の最近のブログ投稿シリーズを確認してください。彼の最新の投稿で、彼は具体的に次のように述べています。

要するに、重要な静的データをすばやく初期化するには、静的コンストラクターを使用する必要があります。

もしそれがエリック・リッパートから来ているなら、それは金と同じくらい良いと思います.

私がお勧めする別の方法は、を使用することLazy<T>です。

于 2013-02-20T18:20:37.230 に答える