0

SimpleMembershipを使用する最新のASP.NETMVC4インターネットアプリケーションを見ています。アクションフィルター内に配置されている次のものが表示されます。

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Ensure ASP.NET Simple Membership is initialized only once per app start
        LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
    }

なぜこのようにコーディングされているのか誰かに教えてもらえますか?アプリが起動するたびに実行されるglobal.asaxの初期化コードを呼び出すだけではどうでしょうか。私は何かが足りないのですか?

4

2 に答える 2

0

初期化をActionFilterに入れると、コードを再利用するのに少し便利です。コントローラを独自のアセンブリに配置し(DIコンテナを使用してコントローラを検索していると仮定)、複数のプロジェクト内で再利用できます。初期化はコントローラーのフィルターで行われるため、自動的に取得されるため、各プロジェクトに登録されていることを確認する必要はありません。

もう1つの理由は、遅延初期化です。サイトがほとんど匿名の場合、この初期化ルーチンを呼び出す必要はありません。確かに、おそらくそれほど効果はありませんが、最初の読み込み遅延は、たとえばホームページではなく、ログインが必要なページでのみ発生することを意味します。

于 2013-03-10T13:11:49.917 に答える
0

なぜそこに置かれているのかわかりません。Membershipただし、関数を適切に実行したい場合は、そのMembershipメソッドAccountControllerを 1 回呼び出す必要がありますLazyInitializer

初期化が失敗した場合でもサイトの認証されていない部分が引き続き機能するように、テンプレートはデータベースの初期化に属性を使用したと思います。

ほとんどの実用的な目的では、これを で行うのが最善Application_Startです。

于 2013-03-10T12:09:38.317 に答える