So, haven't tested this yet, but, theoretically, something like this should work and look similar to what you would get if you made a wrapper class:
public static ValidationResult Validate<T>(this IValidator<T> validator, IEnumerable<T> instances)
{
ValidationResult result = new ValidationResult();
if (instances != null)
{
int index = 0;
using (IEnumerator<T> enumerator = instances.GetEnumerator())
{
while (enumerator.MoveNext())
{
ValidationResult temp = validator.Validate(enumerator.Current);
if (!temp.IsValid)
{
foreach (ValidationFailure failure in temp.Errors)
{
result.Errors.Add(
new ValidationFailure(
string.Format("IEnumerable[{0}].{1}", index, failure.PropertyName),
failure.ErrorMessage,
failure.AttemptedValue)
{
CustomState = failure.CustomState
});
}
}
index++;
}
}
}
return result;
}
public static void ValidateAndThrow<T>(this IValidator<T> validator, IEnumerable<T> instances)
{
ValidationResult result = validator.Validate(instances);
if (!result.IsValid)
{
throw new ValidationException(result.Errors);
}
}