public async Task Validate <T>(Type messageType, IBuilder contextBuilder, T instance, IReadOnlyDictionary <string, string> headers, ContextBag contextBag) { if (!validatorTypeCache.TryGetValidators(messageType, contextBuilder, out var buildAll)) { return; } List <TypeValidationFailure> results = new(); ValidationContext <T> validationContext = new(instance); validationContext.RootContextData.Add("Headers", headers); validationContext.RootContextData.Add("ContextBag", contextBag); if (validationContext.IsAsync) { foreach (var validator in buildAll) { var result = await validator.ValidateAsync(validationContext); AddResults <T>(results, result, validator); } } else { foreach (var validator in buildAll) { var result = validator.Validate(validationContext); AddResults <T>(results, result, validator); } } if (results.Any()) { throw new MessageValidationException(messageType, results); } }
public async Task Validate(Type messageType, IBuilder contextBuilder, object instance, Dictionary <string, string> headers, ContextBag contextBag) { if (!validatorTypeCache.TryGetValidators(messageType, contextBuilder, out var buildAll)) { return; } var results = new List <ValidationFailure>(); var validationContext = new ValidationContext(instance); validationContext.RootContextData.Add("Headers", headers); validationContext.RootContextData.Add("ContextBag", contextBag); foreach (var validator in buildAll) { if (AsyncValidatorChecker.IsAsync(validator, validationContext)) { var result = await validator.ValidateAsync(validationContext) .ConfigureAwait(false); results.AddRange(result.Errors); } else { var result = validator.Validate(validationContext); results.AddRange(result.Errors); } } if (results.Any()) { throw new ValidationException($"Validation failed for message '{messageType}', with the following error/s:", results); } }