図11に示すように、第六のオブジェクトをウェブホスト
これまでのところ、そのような議論が続き、我々はすでに、複数のサーバからなるパイプラインを知っているとミドルウェアは、リスニング受信、処理し、最終的な応答のための要求を完了する方法であるパイプアウト構築する方法です。パイプはウェブホストのホストが開始したときにターゲットアプリケーションから構成されるように ASP.NETコアミニにおいて、我々は、ホスト・アプリケーション・インタフェースを表すことになる次のように省略形をIWebHost:StartAsyncは、アプリケーションを開始するための唯一の方法を含んでいます。
パブリック インターフェースIWebHost { タスクStartAsync()。 }
ウェブホストが組み込まれているので、パイプラインはサーバーとのHttpHandlerで構成され、我々は、2つのオブジェクトのデフォルトの実装では、我々の直接のプロバイダを入力しWEBHOST。StartAsyncでメソッドを実装し、私はちょうどそれにサーバを起動するためのパラメータとして、どのような後者のコールStartAsync前者たいです。
パブリック クラスウェブホスト:IWebHost { プライベート 読み取り専用IServerの_server。 プライベート 読み取り専用RequestDelegate _handler。 公共のウェブホスト(IServerサーバ、RequestDelegateハンドラ) { _server = サーバー。 _handler = ハンドラ。 } パブリックタスクStartAsync()=> _server.StartAsync(_handler)。 }
12、WebHostBuilder第オブジェクト
最後のハイライトのコアターゲットとして、WebHostBuilderのミッションは非常に明確である:ウェブホストアプリケーションホストとして作成されています。ためにウェブホストを作成する際に、登録サーバーを提供する必要性とRequestDelegateを作ったすべての登録ミドルウェアによって構築されたので、IWebHostBuilderインターフェース対応で、我々はそれのための3つのコアメソッドを定義しました。
パブリック インターフェースIWebHostBuilder { IWebHostBuilder UseServer(IServerサーバー) IWebHostBuilder設定(アクション <IApplicationBuilder> 設定します)。 IWebHostビルド(); }
私たちが提供する、を超えてビルドを作成するために使用される方法に加えて、ウェブホストUseServer方法を設定登録方法にサーバーやミドルウェアを登録するために使用。設定方法は、我々はIApplicationBuilderミドルウェアは、オブジェクトが完全に上記で使用するために登録することをアクション<IApplicationBuilder>パラメータ手段の種類を提供します。
インターフェイスのデフォルトIWebHostBuilder持つの実現のために、以下に示すWebHostBuilderはある中間二つのフィールドは、登録を保存するために使用され、メソッドの呼び出しは、アクション設定<IApplicationBuilder>オブジェクトを提供します。ビルドメソッドが呼び出されると、我々は、作成ApplicationBuilderのオブジェクトは(内部メソッドを使用して、新しいApplicationBuilder構成を追加)、そして、それはすべて、このApplicationBuilderオブジェクトに登録されているすべてのミドルウェアパラメータとしてこれらのアクション<IApplicationBuilder>デリゲートを呼び出し、その後。私たちは、究極の方法ビルドがビルドに一緒にすべてのミドルウェアRequestDelegate作業の対象となって、それを呼び出して、ホストとしてサーバアプリケーションのウェブホストオブジェクトを作成し、登録するためにそれを使用します。
パブリック クラスWebHostBuilder:IWebHostBuilder { プライベートIServerの_server。 プライベート 読み取り専用リスト<アクション<IApplicationBuilder >> _configures = 新しいリスト<アクション<IApplicationBuilder >> (); 公共 IWebHostBuilder設定(アクション<IApplicationBuilder> のconfigure) { _configures.Add(設定します)。 返す これを。 } 公共IWebHostBuilder UseServer(IServerサーバ) { _server = サーバー。 返す これを。 } パブリックIWebHostビルド() { VARのビルダー= 新しいApplicationBuilder(); foreachの(VARの構成で_configures) { 設定(ビルダー)。 } 戻り 新しいウェブホスト(_SERVER、builder.Buildを())。 } }
13は、Hello Worldのを見て2
これまでのところ、我々は7つの中核は、ASP.NETコアミニ関与presentation.thankオブジェクト持って、それを私たちは、このシミュレーションの枠組みの中で設立されたHello Worldプログラムを見てみましょう。
パブリック クラスプログラム { パブリック 静的な 非同期タスクのメイン() { のawait 新しいWebHostBuilder() .UseHttpListener() .Configure(アプリ => アプリ .USE(FooMiddleware) .USE(BarMiddleware) .USE(BazMiddleware)) .Build() .StartAsync (); } パブリック 静的RequestDelegate FooMiddleware(RequestDelegate次) => 非同期コンテキスト=> { のawait context.Response.WriteAsync("FOO => " ); のawait 次(コンテキスト); }; 公共の 静的RequestDelegate BarMiddleware(RequestDelegate次) => 非同期コンテキスト=> { のawait context.Response.WriteAsync(" バー=> " ); のawait 次(コンテキスト); } ; パブリック 静的RequestDelegate BazMiddleware(RequestDelegate次) =>コンテキスト=> context.Response.WriteAsync(" バズ" ); }
私たちは、WebHostBuilder拡張メソッドを呼び出すことが好ましいUseHttpListener HttpListenerServerのための登録完了の道が続きます。中間ピースはのFunc <RequestDelegate、RequestDelegate>オブジェクトとして具体化するので、我々は、対応するミドルウェアを定義するために同一の文で自然な方法(FooMiddleware、BarMiddlewareとBazMiddleware)を使用することができます。ミドルウェア・コールのHttpResponse WriteAsync次のように出力ストリームに応じて、文字列本体を指定しました。
公共の 静的 部分 クラス拡張 { パブリック 静的 IWebHostBuilder UseHttpListener(この IWebHostBuilderビルダーは、paramsは 、文字列[]のURL) => builder.UseServer(新しいHttpListenerServer(URLを)); パブリック 静的タスクWriteAsync(これはHttpResponse応答、文字列の内容) { VARバッファー= Encoding.UTF8.GetBytes(コンテンツ)。 リターン response.Body.WriteAsync(バッファ、0 、buffer.Length)。 } }
ASP.NETコアミニASP.NETコアフレーム、すなわち、サーバによって要求され、構成ミドルウェア処理パイプラインのコアの実数部をシミュレートします。真のASP.NETコアフレームワークは、多くの、より複雑持っているのが自然であるので、我々は本当にすべてで何かを逃しましたか?
依存性注入、およびミドルウェアスタートアップStartupFilter登録モード、複数のデータソース、診断ロギングシステムと事前定義のセットのためのシステム構成を含むASP.NETコアミニ覆われていない上に示した5部、あなたがのすべての側面を知りたい場合はミドルウェアは、上記のすべての側面は、巨大なトピックを含んで、私たちは、ASP.NETコア側面関係者は、「ASP.NETコアフレームワークの秘密」を出版することが私の意志で書かれています実際のASP.NETコアフレームワークは、それほど新しい本をお楽しみに。