I.はじめに
しかし、一般的に、あなたが個人的に拡張ポイントの原理を理解するためにそれを感じる知っているので、ソースコードの中に入ることはありません記事では、これらの事は、ソースコードを見て、自分の授業に応じてでてくる学習されるユニバーサルasp.netコア3.xホストの原理を言えば、後半にヒット当時は慎重に遅すぎるのソースコードを勉強するが必要です。
あなたが最初に次の(理解しておく必要があります読む前に、古いブログの推奨ブログAの庭を):
- 依存性注入でasp.netコア、
- コンフィギュレーション、
アプローチを説明するには、次のとおりです。
- アウトライン
- コアクラスと拡張モードのそれぞれについて
- 我々は通常、使用するにはどうすればよいです
- 概要
第二に、概要
前のコンソールアプリケーション、プログラムが起動し、メインWinフォームが最初に実行され、あなたが依存性注入を使用したい場合は...例えば、私たちはConfigurationManager.AppSettingsの設定を使用したい、フレームワークとビジネス上のものを実装するために、すべての私たち自身のコードに従ってくださいこのようautofactなどのサードパーティ製のフレームワークを導入する必要があります。asp.netフレームワークと同様の時代
.NETコア3.0の以前のバージョンではデフォルトで使用され、それは(ホストを設定するプログラムに反映)内部設定IOC容器(Startup.ConfigServicesに反映登録サービス)、および様々な構成のソースを定義し、IWebHostであり、我々は、のcontrolerをたどります、ビジネスコードを含むビューは、簡単に(オプションモードの使用を含む)依存性の注入および設定情報を行うことができます
時々、私たちはサービスを作成したいのですが、このサービスは、HTTPリクエストを処理し、API / Web用に使用されていない、そのようなことは、バックエンドの収集サービスになりたい、リモートのハードウェアデバイスを待っているバックエンド、上でリアルタイムにデータを提出します処理のため。構成asp.netコア設け依存性注入、ログ、および他の機能を使用することが望ましいです。その後、Microsoftはこのようなもののコアは、任意のサービスを運ぶために使用される一般的なホストと呼ばれ、引き出さASP.NETなり、これらのカスタムサービスは、使用形態、依存性注入、ログ、およびその他の機能には非常に簡単にすることができます。今asp.netコアは唯一のユニバーサルホストサービスによって運ばれます。
2.1、デフォルトの実現の主なアイデアは、次のとおりです。
2.1.1、定義(マイクロソフト定義):
- ライフサイクルイベントIOCルートコンテナ、ホストと与えられた定義の適用を含むホストを定義し、IHostedServiceコレクションは、(インスタンスがasp.netコアはその一例であり、サービスまたはアプリケーションと呼ばれます)
- これは、呼び出し側がIOCに委任登録サービスの束を提供することを可能にし、「構成ソース」とホストアプリケーションを設定します
- ホストにIHostedServiceを実装したオブジェクトを追加するための方法を提供します
- 対応するイベントは、呼び出し元が、ホストアプリケーションを登録し、開始及び停止位相をトリガすることができ
2.1.2コンフィギュレーション(我々のコードは、Microsoftがヘルパーメソッドの多くを定義しています):
- IHost例を作成します
- IOCコンテナへのホストの登録サービス
- ホストおよびアプリケーションの設定「を設定ソース
- 内部ホスト(で、私たちの究極のサービス)にIHostedService例を追加します
- ホストとアプリケーションのライフサイクルイベントは、いくつかの特別なタスクを達成するために
2.1.3、起動相(マイクロソフト定義)
- いわゆる基本的な構成は、委員会を通じて達成される上記の「構成ソース」と登録サービスへのコールバックを委託し、(マイクロソフトが提供する拡張メソッドの通常様々なデリゲートの究極的な実行です)
- 最後にトラバース開始HostedService
- 起動時にコールバックは、ライフサイクルイベントに対応します
2.2、アプリケーションは何ですか?
ホストasp.netのコアフレームワークのための上記のいくつかの「アプリケーション」と今では私たちは、「物事のバックエンドサービスは、」他のアプリケーションである、上記言っ例えば、アプリケーションです。コードから、それはIHostedServiceの実現です。
IOCコンテナホスト、ホスト構成:そして、多くの関係にホストアプリケーションは、ホストアプリケーションの複数のような、情報を共有することができます。アプリケーション構成。もちろん、あなたも自分のIOCコンテナとルート設定オブジェクトを作成するために使用することができます
ホストの構成やアプリケーション構成の関係?これらの2つの構成オブジェクトは、ホストが唯一のアプリケーションである場合、あなたは最終的なアプリケーションの設定のためにそれを取ることができ、ホストの構成がホストのみの構成に関連付けられている、ホストアプリケーションの構成は、複数のアプリケーションの設定によって共有され、ホストに存在しています。さらに、アプリケーション構成ホスト構成を備えます
注:私たちの現在の目的を解釈する際に念頭に置いておくには、あなたが、クラスについて考えていないコントローラをルーティング何MVCアクションの独自の定義をホスティング運ぶことができる手段の一般的なホストを、説明することです
第三に、コアクラス
以下は、ホストいくつかのコアのデフォルトの実装クラスを記述し、ほぼすべてのクラスが話せない、理解を容易にするインタフェースの長さを短くするために、対応するインターフェースを持っています。
3.1、ホスト
それは我々が(IHostedServiceを達成するために)適用ホストが(ベアラ)を使用し、ホストを表します。
主に含まれています:ライフ・サイクル・イベントログ、ホストおよびアプリケーションのオプションは、IOCのルートコンテナ、ホスト、ストップスタート/ストップ・メソッドをオブジェクト。
IOCのルートコンテナ+スタート+ Stopメソッド:インタフェースのみを定義し
、それが、作成、構成およびProgram.Mainに開始されたが
デフォルトの実装Microsoft.Extensions.Hosting.Internal.Hostは、それが将来的にホストアクティブにされる内部クラスです。
- WaitForStartAsyncトリガイベントのホスト
- ホストを起動するための一つ一つは、hostedServiceの疲れではありません
- トリガー_applicationLifetime .NotifyStarted();?イベント
- それが停止して逆にする場合、最初のイベントに応じてトリガされた1つの停止hostedServiceずつ、そして最後には、ホストを停止します
拡張:
内部のデフォルトは変更されているため、ホストがある、それは継承できません
- カスタム実装IHost;(これは言っているわけではない、あなたは任意とすることができます)
- ホストアプリケーションとライフサイクル・イベントをサブスクライブ(IHostLifetime、IHostApplicationLifetimeを実現し、IOCのコンテナに追加)
モード2は、ほとんどの場合、実装が簡単でより一般的です
口を言及するには、asp.netデフォルトのホストコア3.xのは今だけ使用し、ルートWeb関連の設定をしましたが、次は説明します
3.2、HostBuilder
ホスト義務がちょうどホストのいくつかの機能を終了し、それはクラスHostBuilderを定義するために別のものを作成して構成することをお勧めします、それはホストの作成者(工場)で、通常我々
- システム起動(Program.Man)で、HostBuilderを作成
- して設定し、(IOCコンテナの登録サービスに、「構成ソース」のホストおよびアプリケーションの設定)
- 最後に、私たちの究極のホストを生成するために、ビルドメソッドを呼び出します
インタフェースを介して第IHostBuilder源は(委任の方法によって)、それはわずかに以下の機能を提供することがわかります
- ホストアプリケーションと「構成ソース」に設定します
- IOCのコンテナ自体の設定
- サービスを追加したいとIOCコンテナ
- 後でホスト構成を作成するためによると
- 特性は、辞書の種類の性質を有する、データをホストを構築するために複数のステップで通信することができます
拡張:
ユーザーの皆様のために、それは、「構成ソース」IOCのコンテナの登録サービスを実現するために、主にその委任する様々な方法の内側に詰めてありませんし、ホストやアプリケーションを設定し
IHostBuilderホストを達成するために推定されていることはほとんどすることができますが、継承HostBuilderそれは抽象仮想メソッドを提供していないので、非常に有意義なことではありません
デフォルトのビルド・プロセス
の初期化ホスト構成オブジェクトIConfigurationは、主に、ホストが他行いません、コールバック
の初期化ホスト環境のオブジェクト_hostingEnvironmentを
- 前のステップでのホスト設定からアプリケーション名
- 環境名(開発?デバッグ?)設定時に、生産のデフォルトモードは、「生産」されていない場合
- コンテンツ根はまた、それが現在のプログラムパスが存在していない場合は、設定から来ました
- コンテンツ作成とContentRootFileProvider実装クラスによるPhysicalFileProviderです
上記の構成と環境この文脈のに応じて(ここで使用される唯一の一時的ホスト構成は、以下の構成アプリケーションに置き換えられます)作成した初期HostBuilderContext、
初期設定
- 根の上記内容に(物理ファイルは、設定ソースとして提供される場合、このプロパティは、将来的に必要とされる)ルートを検索するように構成されました
- ホストの設定は、このアプリケーション設定、アプリケーション設定された構成+ =ホスト構成コールバックを詰め
- 最後に設定この設定オブジェクトのHostBuilderContextを置き換えます
IOCコンテナを作成します
- ServiceCollectionを作成し、複数のオブジェクトの上には、単純な興味・モードにするには
- またIHostApplicationLifetimeとIHostLifetimeとホストを置きます
- オプションモードでは、登録ログ
- コールバックconfigureServicesAction
- ServiceProviderを作成_serviceProviderFactory工場を呼び出し
- コールバック_configureContainerActions
- 最後に、リターンコンテナ
血管解析され、リターンのホストを呼び出します
3.3、HostBuilderファクトリメソッドHost.CreateDefaultBuilder
上記のホストと、また、それがその後、ファクトリメソッドを提供しなければならない理由は、対応するクリエーターHostBuilder、となっていますか?
職務の分離、ホストアプリケーションの原則なのでとコンテナと構成ソースを運ぶための唯一の責任を提供し、コンフィギュレーションのためのHostBuilderのみ責任とホストを作成し、(提供された場合、発信者は、将来的にこれらのパラメータを提供していない)可能性としていくつかのデフォルト値を提供します。この時点で、我々は直接HostBuilderホストを使用し、それを作成するために開始しますが、.NETコアを忘れないようにすることができ、一般的なフレームワークは、究極のホストを作成するには、より簡潔な方法を提供する必要があり、それは、静的メソッドのHost.CreateDefaultBuilderを提供それはより多くの可能なデフォルト値を提供し、コアのタスクは次の通りです:
- 新しいHostBuilder
- コンテンツルートのため、現在のディレクトリのセットアップ
- 構成環境変数のソースとしてホスト構成設定(接頭辞DOTNET_のみの環境変数に関する)のために
- アプリケーション構成設定「appsettings.json」と設定ソースとして「のAppSettings {env.EnvironmentName} .json。」;ソースアプリケーションの構成に加え、環境変数、最終的に、コマンドラインパラメータの設定ソースに追加
- 設定ログイン
- 開発モデル場合は、だけでなく、構成に依存注入範囲を検証します
ユーザーの視点から第四に、
カスタム実装IHostedServiceクラスを介して当社のサービス、サービスの私たちのクラスを達成するために
- 直接使用するの依存性注入、
- さらにオプションモードを使用するには、ホストアプリケーションとグローバルコンフィギュレーションオブジェクトの依存性の注入を取得するように構成された、またはより便利にすることができます
- また、ロガーを注入することができます
- ほぼすべてのIOCのコンテナの作成にホストからのデータは、私たちは、依存性注入を介して取得することができますので
- その他...
呼び出されProgram.man Host.CreateDefaultBuilderは、必要に応じて、好ましくは、関連する拡張メソッドとカスタム拡張メソッドを介して、「構成ソース」を登録し、ホストやアプリケーションサービスを設定するために、適切な手数料を提供しています。当社独自のサービス実装クラスに覚えておくべき重要
V.の概要
ネットコアは、私たちの道のために(ただし、限定されたasp.netコアを含む)新しいベアリングアプリケーションを提供しています- >一般的なホストは、それを通して我々が簡単にアプリケーションの依存性の注入に使用することができ、設定、ログ、あなたは牛のBフレームの多くを実現するためにあなたの想像を使用することができます。
asp.netコア3.xではデフォルトでは運ぶためにそれを使用して起動することで
、ホスト、HostBuilderのコアを共通のホストを達成するためにHost.CreateDefaultBuilder、および拡張ポイントを提供します
最後に、私が言いたいことの.NETコアのデフォルトのAOPプログラムはさらに完璧な場合。
asp.netの下に次の試行は言ったコアが共通のホスト上で実行する方法です