public ValidationResult Validate(TObject objToValidate)
        {
            var propertyValidators = InnerPropertyValidators.Cast <ISyncPropertyValidator>();

            var propertyValidationErrors = propertyValidators.Select(propertyValidator =>
                                                                     propertyValidator.Validate(objToValidate)).ToList();

            return(new ValidationResult(propertyValidationErrors));
        }
        public async Task <ValidationResult> Validate(TObject objToValidate)
        {
            var propertyValidators = InnerPropertyValidators.Cast <IAsyncPropertyValidator>();

            var propertyValidationErrors = new List <PropertyValidationResult>();

            foreach (var asyncPropertyValidator in propertyValidators)
            {
                var propertyValidationResult = await asyncPropertyValidator.Validate(objToValidate);

                propertyValidationErrors.Add(propertyValidationResult);
            }

            return(new ValidationResult(propertyValidationErrors));
        }