//1. [Required]
        //2. Other attributes
        //3. IValidatableObject Implementation
        public IEnumerable <ValidationResult> Validate(object o)
        {
            var attributeValidationContext = new System.ComponentModel.DataAnnotations.ValidationContext(o, _serviceProvider, new Dictionary <object, object>());

            var validationResults = new List <ValidationResult>();
            var isValid           = Validator.TryValidateObject(
                attributeValidationContext.ObjectInstance,
                attributeValidationContext,
                validationResults,
                validateAllProperties: true); // if true [Required] + Other attributes

            var attributeValidationResults = validationResults.Where(r => r != ValidationResult.Success);

            var fluentValidationContext = new FluentValidation.ValidationContext <object>(o);

            var fluentValidationFailures = _validators
                                           .Select(v => v.Validate(fluentValidationContext))
                                           .SelectMany(result => result.Errors)
                                           .Where(f => f != null)
                                           .ToList();

            var fluentValidationResults = fluentValidationFailures.Select(f => new ValidationResult(f.ErrorMessage, new string[] { f.PropertyName }));

            return(attributeValidationResults.Concat(fluentValidationResults));
        }
Example #2
0
        public Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next)
        {
            var context  = new FluentValidation.ValidationContext <TRequest>(request);
            var failures = _validators
                           .Select(v => v.Validate(context))
                           .SelectMany(result => result.Errors)
                           .Where(f => f != null)
                           .ToList();

            if (failures.Count != 0)
            {
                throw new ValidationException(failures);
            }
            return(next());
        }
        public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next)
        {
            if (_validators.Any())
            {
                var context           = new FluentValidation.ValidationContext <TRequest>(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 Exceptions.ValidationException(failures);
                }
            }
            return(await next());
        }
Example #4
0
        public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next)
        {
            // if you have validation setup for the request
            if (_validators.Any())
            {
                // create new validation context for the request
                var context = new FluentValidation.ValidationContext <TRequest>(request);
                // validate for each task and return validationResult if all of them have commpleted
                var validationResults = await Task.WhenAll(_validators.Select(v => v.ValidateAsync(context, cancellationToken)));

                //get failures from ValidationResult
                var failures = validationResults.SelectMany(r => r.Errors).Where(f => f != null).ToList();

                // if failures
                if (failures.Count != 0)
                {
                    throw new Exceptions.ValidationException(failures);
                }
            }

            // return next the handle if you dont have a validation setup
            return(await next());
        }