私はダニエルの答えに実際の例を追加したいと思います。 (彼の答えは非常に詳細で正確で、これを最初にチェックしてください)。
TL; DRは:
services.Add
直接ミドルウェアに関連していません。 Dependency Injection Containerに依存関係を登録することです。
app.Use
は、どのコードがパイプライン(論理)で実行され、どの順序でパイプラインが実行され、パイプラインが処理を続けることができるかについてです。想像力はここでの制限です。IPアドレスによっては「あなたの国で申し訳ありませんサービスが利用できません」というミドルウェアを書く例があります)
app.UseMiddleware
app.Use
と同じですコードをインラインで宣言する代わりに、呼び出されるInvokeメソッドを持つクラスを指定します。
それでは、いくつかのサンプルコードを取得してみましょう:
は、あなたがあなたのアプリケーションがHTMLをminifingのように、あなたの出力や、あなたの出力の一部を処理したいとしましょう。
出力に出力する前に応答をインターセプトするミドルウェアを追加して、それを縮小することができます。
あなたが使用することができます。
app.Use(async (context, next) =>
{
await next(context);
context.Response // will have the response as processed by all the previous middleswares like mvc.
if IsMinifiable(context.Response)
MinifyResponse(context.Response);
});
を使用すると、さまざまなアプリケーションや他の人があなたのミドルウェアを共有したい場合は、ミドルウェアを作成したいとより多くのようにそれを使用することがあります。
app.UseMiddleware<HtmlMinifierMiddleware>();
これは、configureメソッドで1行のコードですべての作業を行います。 app.UseHtmlMinifier()
のような拡張メソッドを出荷し、構成に連鎖したり構成パラメータをサポートできる特定のオブジェクトを返すのが一般的です。拡張を使用することで、柔軟性、可読性やAPI見つけやすさの多くを提供します:あなたが見ることができるように、あなたがIHtmlMiniferを渡す必要があるので、あなたが必要とする
public class HtmlMinifierMiddleware {
public HtmlMinifier(IHtmlMinifier minifier) {
// ...
}
public string Minify(string content) {
return minifier.Minify(content);
}
// ...
}
:D
は今、あなたのミドルウェアがdelcaredされ、このようなものを想像しますDIのためにそれを登録する。
これは、同じようConfigureService上で達成される:
services.AddScoped<IHtmlMinifier, MyCoolHtmlMinifier>();
は、今あなたが1を必要はありません想像するが、多くの依存関係、それはする必要がありますすべての単一の依存関係を知るためのミドルウェアの開発者/消費者次第となります登録された
ミドルウェアの作者は、通常、DIコンテナへの登録サービスの拡張方法であるservices.AddHtmlMinifier()
のように、開発者の使用を容易にする拡張機能を出荷しています。
ミドルウェアを使用していない場合でも、同じパターンを使用して独自のアプリケーションの依存関係を活用できます。
あなたのアプリがeコマースである場合たとえば、あなたはあなたの依存関係を登録する拡張メソッドを作成することができます:services.AddProductManagement()
、services.AddPriceCalculator()
、services.AddSearching()
など、それともservices.AddMyCoolApplication()
(登録)追加のきれいな方法を提供するために、あなたのサービス(依存関係) DIコンテナによってアプリケーションで検索されます。
リンクは非常にhelpulだった、ありがとう – wodzu