Visual StudioでASP.NET Mvcプロジェクトを作成すると、_Global.asax
_および_Global.asax.cs
_が作成されます。この.csファイルには、標準の_Application_Start
_メソッドがあります。
私の質問は次のとおりです、この関数はどのように呼び出されますか?オーバーライドではないからです。したがって、私の推測では、このメソッド名は慣例によるものです。 _Application_Error
_メソッドについても同じことが言えます。
これらのメソッドがどこにフックされているのか知りたいです。これらのメソッドを(オーバーライドではなく)作成しているため、MSDNでそれらのドキュメントを見つけることができませんでした。 ( this ページが見つかりましたが、Error
イベントにフックするように指示するだけで、Application_Error(object sender, EventArgs e)
を表示しますが、イベントとメソッドのリンク方法は表示しません。)
_//Magicly called at startup
protected void Application_Start()
{
//Omitted
}
//Magicly linked with the Error event
protected void Application_Error(object sender, EventArgs e)
{
//Omitted
}
_
魔法ではありません。ASP.NETパイプラインは、これらすべてを結び付けます。
具体的には、以下のパーツに興味があります。
HttpApplication
オブジェクトがリクエストに割り当てられます。
発生するイベントのリストとその順序で構成されます。
そのページ全体にリンクがあり(ここに含めるには多すぎます)、さらに多くの情報を含む他のさまざまなページにリンクしています。
ASP.NETは、
Application_BeginRequest
などの命名規則Application_eventを使用して、Global.asaxファイル内のハンドラーにアプリケーションイベントを自動的にバインドします。これは、ASP.NETページメソッドがページのPage_Load
イベントなどのイベントに自動的にバインドされる方法に似ています。
受け入れられた答えの「魔法」を分かりやすくするために、ASP.Netパイプラインは、クラスの_Application_EventName
_を使用して、HttpApplication
イベントをメソッドに自動的にバインドします。 (私のように)ハンドラーに明示的にバインドされたイベントを表示する場合は、HttpApplication.Init()
をオーバーライドすることでバインドできます。VisualStudioは、適切な署名でハンドラーメソッドを生成します。
_public override void Init()
{
this.BeginRequest += MvcAppliction_BeginRequest;
}
private void MvcApplication_BeginRequest(object sender, EventArgs e)
{
...
}
_
イベントをバインドするこの方法の例 があります
ASP.Net自体が作成します。 MSDNによるフローは次のとおりです-
参照はこちら-ASP.Net Application Life Cycle。
参照から-ASP.NETは、Application_BeginRequestなどの命名規則Application_eventを使用して、アプリケーションイベントをGlobal.asaxファイル内のハンドラーに自動的にバインドします。