以前のASP.NETアプリケーションでは、Webページに必要なデータである「コンテキスト」の概念がありました。したがって、コンテキストにはサイト自体に関するデータが含まれ、最終使用の詳細、例えばなど,などを含めることができます。ASP.NET Coreアプリケーションのコンテキストを設定する方法
完全なコンテキストは、要求のライフサイクルの開始時にHttpModuleによってロードされました。 Contextの各部分は、CacheまたはCurrent Items Collectionのいずれかに保持されていました。このページは、必要に応じてコンテキストを呼び出すことができます。
.NETコアで同様のことを達成するにはどうすればよいのでしょうか。
我々はエンドユーザーのデータの簡単な例を取る場合は....
私の考えは、このデータは、「エンドユーザー」と呼ばれるオブジェクトで開催されるということでした。コントローラのコンストラクタタイプIEndUserの引数を持つことができ、私たちはStartup.csに、このインスタンスを追加するには、依存性注入に建て使用することもできます。もちろん
services.AddScoped<IEndUser, EndUser>();
これはバニラエンドユーザーオブジェクトが追加されますが、私が望んを私が "AddScoped"を使用しているので、最初にすべてのプロパティを設定するためにMiddleWareクラスを使用することができました。そして、私の希望は、コントローラのコンストラクタがMiddleWareが投入したのと同じインスタンスを受け取ることでした。しかし、私はまもなく、これらが異なるオブジェクト(明らかに後天的な見解)であり、これが間違ったアプローチであることを認識しました。
だから正しいアプローチは何ですか?次の点に注意してクマ:
- 古いHttpModuleをすると、人は(エンドユーザーオブジェクトへの考え方に似)サイトオブジェクト(DBからデータをロードする)をロードし、site.OnMaintenance財産場合HttpModuleを内部にチェックすることができこの場合、現在の要求に関係なく、実行が要求されたコントローラに入る前に、適切なページへのリダイレクトを実行します。
だから私が好きな、要約する:
- 私のミドルウェアクラスを作成し、
- 私のミドルウェアは、そのクラスのプロパティでテストを実行するために(データベースから)そのプロパティを設定するために潜在的にリダイレクトを実行します。
- リダイレクトがない場合、そのインスタンスをコントローラのコンストラクタに挿入します。