CustomValidationAttribute指定的方法未被调用

我正在使用System.ComponentModel.DataAnnotations.CustomValidationAttributevalidation我的一个POCO类,当我尝试对其进行unit testing时,它甚至没有调用validation方法。

public class Foo { [Required] public string SomethingRequired { get; set } [CustomValidation(typeof(Foo), "ValidateBar")] public int? Bar { get; set; } public string Fark { get; set; } public static ValidationResult ValidateBar(int? v, ValidationContext context) { var foo = context.ObjectInstance as Foo; if(!v.HasValue && String.IsNullOrWhiteSpace(foo.Fark)) { return new ValidationResult("Either Bar or Fark must have something in them."); } return ValidationResult.Success; } } 

但是当我尝试validation它时:

 var foo = new Foo { SomethingRequired = "okay" }; var validationContext = new ValidationContext(foo, null, null); var validationResults = new List(); bool isvalid = Validator.TryValidateObject(foo, validationContext, validationResults); Assert.IsFalse(isvalid); //FAIL!!! It's valid when it shouldn't be! 

它甚至从未进入自定义validation方法。 是什么赋予了?

尝试使用带有bool的重载,该bool指定是否应validation所有属性。 对最后一个参数传递true。

 public static bool TryValidateObject( Object instance, ValidationContext validationContext, ICollection validationResults, bool validateAllProperties ) 

如果传递false或省略validateAllProperties,则仅检查RequiredAttribute。 这是MSDN文档 。