私は現在、asp.netコアアプリケーションの一部の大型コントローラを改良しています。これを行うために我々はMediatrを選択しました。現在、これらの大きなアクションをプロセッサー前/後のハンドラー&に分割しています。Mediatr - プロセッサ前/後処理
一部のコマンドでは、内部通知システム(node.jsサービス)を起動する必要があります。そのために、イベントサービスに通知するポストプロセッサを開発しました。しかし、私はをインターフェイスから継承しているコマンドに対してのみ "トリガ"したいと思います。つまり、Mediatrはすべてのプリ/ポストプロセッサーをロードしますが、コマンドタイプがジェネリック制約に一致するものだけをトリガーします。コマンドがINotifyCommandから継承されていない場合、このポストプロセッサがトリガされない
public class NotificationPostProcessor<TCommand, TResponse> : IRequestPostProcessor<TCommand, TResponse>
where TCommand : >>INotifyCommand<<
where TResponse : CommandResult
{
(...)
}
:最後に、それは次のようになります。
プリプロセッサと同じことが起こります。たとえば、特定のコマンドに余分なデータを追加するには、プリプロセッサが必要です。
現在、私がしているのは恐ろしいです。私は確かに良い方法があります。
public class NotificationPostProcessor<TCommand, TResponse> : IRequestPostProcessor<TCommand, TResponse>
where TCommand : IRequest<TResponse>
where TResponse : CommandResult
{
private readonly INotificationService _service;
public NotificationPostProcessor(INotificationService service)
{
_service = service;
}
public async Task Process(TCommand command, TResponse response)
{
var cmd = command as NotifyBaseCommand;
if (cmd != null && response.IsSuccess)
await _service.Notify(cmd.Event, command, response);
}
}
私は+ MediatR.Extensions.Microsoft.DependencyInjection
パッケージデフォルトのasp.netのコア依存性注入エンジンを使用していますので、私は直接ポスト&プリプロセッサを登録していませんよ。
// Pipeline engine used internally to simplify controllers
services.AddMediatR();
// Registers behaviors
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(Pipeline<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(AuditBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPreProcessorBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPostProcessorBehavior<,>));
// Registers command validator
services.AddTransient(typeof(IValidator<RegisterUserCommand>), typeof(RegisterUserCommandValidator));
私はここで少し失われています。どのように私はこのシステムを改善することができますか?
はどうやらASP.netコアDIがこの機能をサポートしていない、 セバスチャン