Implement Pipeline Behavior in DispatchR
mainDispatchR uses the Chain of Responsibility pattern for pipeline behaviors. Instead of a delegate next(), you must inject the NextPipeline handler and call its Handle method.
To create a generic pipeline behavior that applies to all requests of a specific return type (e.g., all ValueTask requests), use the following pattern:
// Specific behavior
public sealed class LoggingBehaviorDispatchR : IPipelineBehavior<PingDispatchR, ValueTask<int>>
{
public required IRequestHandler<PingDispatchR, ValueTask<int>> NextPipeline { get; set; }
public ValueTask<int> Handle(PingDispatchR request, CancellationToken cancellationToken)
{
return NextPipeline.Handle(request, cancellationToken);
}
}
// Generic behavior for all ValueTask requests
public class GenericPipelineBehavior<TRequest, TResponse>() : IPipelineBehavior<TRequest, ValueTask<TResponse>>
where TRequest : class, IRequest<TRequest, ValueTask<TResponse>>
{
public required IRequestHandler<TRequest, ValueTask<TResponse>> NextPipeline { get; set; }
public ValueTask<TResponse> Handle(TRequest request, CancellationToken cancellationToken)
{
return NextPipeline.Handle(request, cancellationToken);
}
}