Какую версию Enterprise Library вы используете для своего примера кода? Я попробовал это с помощью Enterprise Library 5.0, но это не сработало.
Я отследил его до следующего раздела кода с исходным кодом EL5.0:
[namespace Microsoft.Practices.EnterpriseLibrary.Validation]
[public static class Validation]
public static ValidationResults Validate<T>(T target, ValidationSpecificationSource source)
{
Type targetType = target != null ? target.GetType() : typeof(T);
Validator validator = ValidationFactory.CreateValidator(targetType, source);
return validator.Validate(target);
}
Если целевой объект определен, то target.GetType () вернет самое конкретное определение класса, а НЕ определение интерфейса.
Мой обходной путь - заменить вашу линию:
ValidationResults r = Validation.Validate<ISpike>(spike);
С:
ValidationResults r ValidationFactory.CreateValidator<ISpike>().Validate(spike);
Это заставило меня работать.