3

ASP.NETで初期化コードを実行できる場所はたくさんあります。

  • web.configが処理されます
  • WebActivatorPreApplicationStartMethod
  • WebActivatorPostApplicationStartMethod
  • Global.asax Application_Start

これらの発生の順序は何ですか?このリストに追加する必要のあるアイテムは他にありますか?

編集:統計は最初の呼び出し場所に関連していると述べられたので、私はそれらのためにこれを分割するつもりです

WebActivatorで使用されるFooクラスPreApplicationStartMethod

  • 静的コンストラクター
  • 静的読み取り専用フィールド

WebActivatorで使用されるバークラスPostApplicationStartMethod

  • 静的コンストラクター
  • 静的読み取り専用フィールド

Global.asaxで使用されるBazクラス Application_Start

  • 静的コンストラクター
  • 静的読み取り専用フィールド

わかりやすくするために、上記の例では、それぞれがその場所で使用されているFoo / Bar / Bazクラスに依存し、クラスに静的コンストラクターと静的読み取り専用フィールドが含まれていると仮定します。

4

3 に答える 3

11

静的コンストラクターと静的フィールドの初期化は、ASP.NETではなく、ランタイムによって決定されます。Eric Lippertは最近、それらがどのように機能するかを詳述した素晴らしい4部構成の ブログシリーズ を投稿しました。

あなたが言及した残りの項目については、でマークされたメソッドSystem.Web.PreApplicationStartMethodAttributeが最初に実行されます。この属性のMSDNドキュメントによると、これらのメソッドが呼び出される順序は保証されていません。

Phil Haackによるブログ投稿によると、この属性により、開発者はアプリケーションの起動時に他の2つのメソッドを呼び出すことができBuildProvider.RegisterBuildProviderますBuildManager.AddReferencedAssembly。のMSDNドキュメントにBuildManager.AddReferenceAssemblyは、このメソッドはアプリケーションのApplication_PreStartInitステージでのみ実行できると記載されています。これは、でマークされたすべてのメソッドSystem.Web.PreApplicationStartMethodAttributeが実行されるときであることを示しています。

WebActivatorは、フレームワークを使用PreApplicationStartMethodAttributeしてアプリケーションの起動に接続します。呼び出されると、HttpModuleWebActivator.PreApplicationStartMethodAttributeを動的に登録する前に、前にマークされたすべてのメソッドを検索して実行します。HttpModuleは、HttpApplicationクラスでApplication_Startが呼び出された後、-でマークされたすべてのメソッドを後で呼び出します。PostApplicationStartMethodAttribute

したがって、要約すると、順序は次のとおりです。

  1. Web.configがメモリに読み込まれます
  2. でマークされたメソッドPreApplicationStartMethodAttribute
  3. HttpApplication.Application_Start
  4. でマークされたメソッドWebActivator.PostApplicationStartMethodAttribute
于 2013-02-20T19:32:47.630 に答える
2

アプリケーションのライフサイクルは次のようになります。

  • アプリケーションリソースが要求されます。
  • 統合パイプラインは、アプリケーションの最初の要求を受け取ります。
  • 応答オブジェクトは、要求ごとに作成されます。
  • HttpApplicationオブジェクトがリクエストに割り当てられます
  • リクエストはHttpApplicationパイプラインによって処理されます。

さらに、リクエストパイプラインで発生するイベントは次のとおりです。

ASP.NETアプリケーションのライフサイクル

ASP.NETアプリケーションのライフサイクルの概要を参照してください

静的コンストラクターと静的読み取り専用フィールド(インラインでインスタンス化)は、その型がコードで初めて使用されるときに初期化されます。これは、アプリケーションの存続期間のどの時点でも発生する可能性があります。

具体的にあなたの質問に答える

WebActivatorプロジェクトページによると、これはイベントの順序です。

  1. web.configが処理されます
  2. WebActivator PreApplicationStartMethod
  3. Global.asax Application_Start
  4. WebActivator PostApplicationStartMethod

静的初期化に関する限り、Justinが彼の回答でリンクしたEricLippertsの投稿を参照してください。

于 2013-02-20T18:18:29.840 に答える
0

現在のリストには、必ずしもASP.NETのみに関連しているとは限らないもの(静的読み取り専用フィールドなど)がいくつかありますが、このリンクではASP.NETのライフサイクルについて説明しています。発生することはたくさんありますが、それらの多くは、正当な理由がある場合に独自のコードの一部を挿入できるカスタマイズを可能にします。

あなたの質問はかなり広いです。ここで達成しようとしていることで、プロセスのどの部分があなたのやりたいことに理想的であるかを突き止めることができるものはありますか?

于 2013-02-20T18:12:32.960 に答える