/// <summary>
 /// Overrides global <see cref="InputValidator"/>.
 /// Uses all <see cref="TValidator"/> to resolve <see cref="InputValidator"/> with <see cref="ValidationStrategy{T}"/>
 /// </summary>
 public static ArgumentValidationBuilder UseValidators <TValidator>(
     this ArgumentValidationBuilder builder,
     Action <ValidationStrategy <object> > validationStrategy)
     where TValidator : class, IValidator
 {
     return(builder.UseValidators(typeof(TValidator), validationStrategy));
 }
Ejemplo n.º 2
0
        public override void Configure(ArgumentValidationBuilder builder)
        {
            var validationStrategy = TryGetValidationStrategy();

            if (validationStrategy is null)
            {
                builder.UseValidators(ValidatorType);
            }
            else
            {
                builder.UseValidators(ValidatorType, validationStrategy);
            }
        }
        /// <summary>
        /// Overrides global <see cref="InputValidator"/>.
        /// Uses all <see cref="TValidator"/> to resolve <see cref="InputValidator"/>, with custom <see cref="ValidationStrategy{TInput}"/>
        /// </summary>
        public static ArgumentValidationBuilder UseValidators <TInput, TValidator>(
            this ArgumentValidationBuilder builder,
            Action <ValidationStrategy <TInput> > validationStrategy)
            where TValidator : class, IValidator <TInput>
        {
            return(builder.UseInputValidators(async inputValidatorContext =>
            {
                var argumentValue = inputValidatorContext
                                    .MiddlewareContext
                                    .ArgumentValue <TInput>(inputValidatorContext.Argument.Name);

                if (argumentValue is null)
                {
                    return null;
                }

                var validators = (TValidator[])inputValidatorContext.MiddlewareContext.Services.GetServices <TValidator>();

                var validationContext = ValidationContext <TInput> .CreateWithOptions(argumentValue, validationStrategy);

                ValidationResult?validationResult = null;

                for (var validatorIndex = 0; validatorIndex < validators.Length; validatorIndex++)
                {
                    var validator = validators[validatorIndex];

                    var validatorResult = await validator
                                          .ValidateAsync(validationContext, inputValidatorContext.MiddlewareContext.RequestAborted)
                                          .ConfigureAwait(false);

                    if (validationResult is null)
                    {
                        validationResult = validatorResult;
                    }
                    else
                    {
                        validationResult.MergeFailures(validatorResult);
                    }
                }

                return validationResult;
            }));
        }
        /// <summary>
        /// Overrides global <see cref="InputValidator"/>.
        /// Uses type to resolve <see cref="InputValidator"/>
        /// </summary>
        public static ArgumentValidationBuilder UseValidators(
            this ArgumentValidationBuilder builder,
            Type validatorType)
        {
            return(builder.UseInputValidators(async inputValidatorContext =>
            {
                var argumentValue = inputValidatorContext
                                    .MiddlewareContext
                                    .ArgumentValue <object?>(inputValidatorContext.Argument.Name);

                if (argumentValue is null)
                {
                    return null;
                }

                var validators = (IValidator[])inputValidatorContext.MiddlewareContext.Services.GetServices(validatorType);

                var validationContext = new ValidationContext <object>(argumentValue);

                ValidationResult?validationResult = null;

                for (var validatorIndex = 0; validatorIndex < validators.Length; validatorIndex++)
                {
                    var validator = validators[validatorIndex];

                    var validatorResult = await validator
                                          .ValidateAsync(validationContext, inputValidatorContext.MiddlewareContext.RequestAborted)
                                          .ConfigureAwait(false);

                    if (validationResult is null)
                    {
                        validationResult = validatorResult;
                    }
                    else
                    {
                        validationResult.MergeFailures(validatorResult);
                    }
                }

                return validationResult;
            }));
        }
        /// <summary>
        /// Overrides global <see cref="InputValidator"/>.
        /// Uses type to resolve <see cref="InputValidator"/>
        /// </summary>
        public static ArgumentValidationBuilder UseValidator(
            this ArgumentValidationBuilder builder,
            Type validatorType)
        {
            return(builder.UseInputValidators(inputValidatorContext =>
            {
                var argumentValue = inputValidatorContext
                                    .MiddlewareContext
                                    .ArgumentValue <object?>(inputValidatorContext.Argument.Name);

                if (argumentValue is null)
                {
                    return Task.FromResult <ValidationResult?>(null);
                }

                var validator = (IValidator)inputValidatorContext.MiddlewareContext.Services.GetRequiredService(validatorType);

                var validationContext = new ValidationContext <object>(argumentValue);

                return validator.ValidateAsync(validationContext, inputValidatorContext.MiddlewareContext.RequestAborted);
            }));
        }
        /// <summary>
        /// Overrides global <see cref="InputValidator"/>.
        /// Uses <see cref="TValidator"/> to resolve <see cref="InputValidator"/>, with custom <see cref="ValidationStrategy{TInput}"/>
        /// </summary>
        public static ArgumentValidationBuilder UseValidator <TInput, TValidator>(
            this ArgumentValidationBuilder builder,
            Action <ValidationStrategy <TInput> > validationStrategy)
            where TValidator : class, IValidator <TInput>
        {
            return(builder.UseInputValidators(inputValidatorContext =>
            {
                var argumentValue = inputValidatorContext
                                    .MiddlewareContext
                                    .ArgumentValue <TInput>(inputValidatorContext.Argument.Name);

                if (argumentValue is null)
                {
                    return Task.FromResult <ValidationResult?>(null);
                }

                var validator = inputValidatorContext.MiddlewareContext.Services.GetRequiredService <TValidator>();

                var validationContext = ValidationContext <TInput> .CreateWithOptions(argumentValue, validationStrategy);

                return validator.ValidateAsync(validationContext, inputValidatorContext.MiddlewareContext.RequestAborted);
            }));
        }
 /// <summary>
 /// Overrides global <see cref="InputValidator"/>.
 /// Uses all <see cref="TValidator"/> to resolve <see cref="InputValidator"/>
 /// </summary>
 public static ArgumentValidationBuilder UseValidators <TValidator>(this ArgumentValidationBuilder builder)
     where TValidator : class, IValidator
 {
     return(builder.UseValidators(typeof(TValidator)));
 }
 /// <summary>
 /// Overrides global <see cref="InputValidator"/>.
 /// Uses all <see cref="TValidator"/> to resolve <see cref="InputValidator"/> with <see cref="ValidationDefaults.ValidationStrategies.Default{TInput}"/> strategy
 /// </summary>
 public static ArgumentValidationBuilder UseValidators <TInput, TValidator>(this ArgumentValidationBuilder builder)
     where TValidator : class, IValidator <TInput>
 {
     return(builder.UseValidators <TInput, TValidator>(ValidationDefaults.ValidationStrategies.Default));
 }
 public sealed override void Configure(ArgumentValidationBuilder builder)
 {
     builder.SkipValidation(SkipValidation);
 }
 public override void Configure(ArgumentValidationBuilder builder)
 {
     builder.UseDefaultErrorMapper();
 }
 public abstract void Configure(ArgumentValidationBuilder builder);
Ejemplo n.º 12
0
 public override void Configure(ArgumentValidationBuilder builder)
 {
     builder.UseDefaultErrorMapperWithExtendedDetails();
 }
Ejemplo n.º 13
0
 public override void Configure(ArgumentValidationBuilder builder)
 {
     builder.UseDefaultInputValidator();
 }