ASP.NET Core、最新のMediatR、およびMediatRを使用しています CoreのDIの拡張 。
検証付きのパイプラインを設定しようとしています 公式ブログ投稿を使用 。例 ここにあります 。
そのパイプラインクラスを登録/使用する方法がわかりません。別の ブログ投稿 はこれを行う方法を示していますが、AutoFac用だと思います。
組み込みコンテナに対してこれを行うにはどうすればよいですか?
あなたが言及する投稿は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());
オープンジェネリックTracingBehavior
をIPipelineBehavior
のジェネリック実装として登録するだけです。