5

ではGlobal、アプリケーションの代わりにAutoEventWireups、基になるアプリケーションイベント(BeginRequest, AuthorizeRequest, Errorなど)のほとんど、およびなどの非同期メソッドのセットに対してイベントが公開されているようです。ただし、 !AddOnBeginRequestAsyncに相当するイベントが見つかりません。ApplicationStart

AutoEventWireupだから私の質問は、メソッドApplication_(On)Startがフックされている「同じ」イベントをサブスクライブする方法はありますか?

public class Global : HttpApplication
{
    public Global()
    {
        // I can do this ...
        base.BeginRequest += new EventHandler(Global_BeginRequest);
        // Or even AddOnBeginRequestAsync();

        // But how can I do this?
        base.ApplicationStart += new EventHandler(GlobalApplication_Start);
    }

    protected void Global_BeginRequest(object sender, EventArgs e)
    {
      // ...
    }

    protected void Global_ApplicationStart(object sender, EventArgs e)
    {
      // ...
    }
}

(興味深いことに... AutoEventWireupsGlobal.asaxでをオフにする方法はありますか?。AutoEventWireup= "false"属性の使用は、aspxページでのみ機能するようです)

編集-ApplicationStartとApplicationEndは「 HttpApplicationイベントを表さない特別なメソッド」のようです。だから私は間違った木を完全に吠えているかもしれません。

再編集 :なぜこれが必要なのですか?残念ながら、企業のお客様には、新しいアプリがカスタムHttpApplicationクラスを継承する必要があるフレームワークがあり、FWRHttpApplicationはすでに自動配線を実装しているApplication_(On)Startため、フレームワークの配線をオーバーライドする別の方法を見つける必要がありました。これにより、ブートストラップを実行できます。 IoCコンテナとAutomapperマップ。ロイドの答えによると、これはまったく同じInit()ではありませんが、ctorまたは同様にブートストラップすることもできます。最終的に、複数のサブスクリプションを許可するように企業フレームワークを変更することができました。

4

2 に答える 2

4

Initをオーバーライドできます。

public class MyApplication : HttpApplication
{

    public override void Init()
    {
        base.Init();
    }

}

ただし、コンストラクターも同様に機能する可能性があります。

于 2012-07-09T16:46:28.727 に答える
0

Initメソッドには十分注意してください。

アプリケーションのライフサイクルで1回実行するコードにInitメソッドを使用することは、HttpApplicationのインスタンスごとに1回呼び出されるため、不適切なオプションです。

あなたが言ったように、ApplicationStartとApplicationEndはHttpApplicationイベントを表さない特別なメソッドですが、AutoEventWireupsがtrueに設定されている場合はPageイベントと同じように機能します。

.NETソースコードにジャンプした後、HttpApplicationFactoryクラスがGlobal.asaxファイルで「Application_OnStart」または「Application_Start」という名前のメソッドを探し、reflection => ReflectOnMethodInfoIfItLooksLikeEventHandler()を使用してそれを呼び出すことがわかりました。

同様の主題についての私の質問をチェックしてください:HttpApplication.Startイベントは存在しません

于 2019-02-13T09:28:14.710 に答える