web-dev-qa-db-ja.com

ASP.NET Core用にMediatRパイプラインハンドラーを登録して使用するにはどうすればよいですか?

ASP.NET Core、最新のMediatR、およびMediatRを使用しています CoreのDIの拡張

検証付きのパイプラインを設定しようとしています 公式ブログ投稿を使用 。例 ここにあります

そのパイプラインクラスを登録/使用する方法がわかりません。別の ブログ投稿 はこれを行う方法を示していますが、AutoFac用だと思います。

組み込みコンテナに対してこれを行うにはどうすればよいですか?

10
grokky

あなたが言及する投稿はMediatR2.xを使用しています。
MediatR 3.0は少し前にリリースされ、パイプラインのサポートが組み込まれています。 関連ドキュメント を読むことをお勧めします。

つまり、MediatRはIPipelineBehavior<TRequest, TResponse>を公開するようになり、コンテナーに登録したインスタンスは、ハンドラーの構築時にMediatRによって自動的に検出されます。

ASP.NETCoreでは次のようになります。

public class MyRequest : IRequest<string>
{
}

public class MyRequestHandler : IRequestHandler<MyRequest, string>
{
    public string Handle(MyRequest message)
    {
        return "Hello!";
    }
}

public class TracingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
    public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next)
    {
        Trace.WriteLine("Before");
        var response = await next();
        Trace.WriteLine("After");

        return response;
    }
}

非常に単純で、リクエスト、ハンドラー、および「ロギング」を行う動作。

登録も非常に簡単です。

var services = new ServiceCollection();
services.AddMediatR(typeof(Program));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(TracingBehaviour<,>));
var provider = services.BuildServiceProvider();

var mediator = provider.GetRequiredService<IMediator>();

var response = await mediator.Send(new MyRequest());

オープンジェネリックTracingBehaviorIPipelineBehaviorのジェネリック実装として登録するだけです。

17