using FluentValidation; using MediatR; namespace Events.WebAPI.Contract.Validation; public class ValidationBehaviour : IPipelineBehavior where TRequest : IBaseRequest { private readonly IEnumerable> validators; public ValidationBehaviour(IEnumerable> validators) { this.validators = validators; } public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) { if (validators.Any()) { var context = new ValidationContext(request); var validationResults = await Task.WhenAll(validators.Select(v => v.ValidateAsync(context, cancellationToken))); var failures = validationResults.SelectMany(r => r.Errors).Where(f => f != null).ToList(); if (failures.Count != 0) throw new ValidationException(failures); } return await next(); } }