I think you're right. Looks like this works:
public static ValidationResult ValidateCollection<T>(this IValidator<T> validator, IEnumerable<T> instances)
{
ValidationResult result = new ValidationResult();
if (instances != null)
{
using (IEnumerator<T> enumerator = instances.GetEnumerator())
{
int index = 0;
while (enumerator.MoveNext())
{
ValidationResult temp = validator.Validate(enumerator.Current);
if (!temp.IsValid)
{
foreach (ValidationFailure failure in temp.Errors)
{
string item = string.Format("IEnumerable[{0}]", index);
result.Errors.Add(
new ValidationFailure(
string.Format("{0}.{1}", item, failure.PropertyName),
string.Format("{0}: {1}", item, failure.ErrorMessage),
failure.AttemptedValue)
{
CustomState = failure.CustomState
});
}
}
index++;
}
}
}
return result;
}
public static void ValidateCollectionAndThrow<T>(this IValidator<T> validator, IEnumerable<T> instances)
{
ValidationResult result = validator.ValidateCollection(instances);
if (!result.IsValid)
{
throw new ValidationException(result.Errors);
}
}
Thanks for your help!