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);
        }
    }
Exemple #2
0
    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);
        }
    }