0

我想实现以下目标,但似乎不可能:

[genericValidation  || specificValidation]
public int content{ get; set; }

我不想融合这两个验证,因为 genericValidation 在程序(其他类)的多个地方使用,并且必须在每个 specificValidation 上复制/粘贴。而具体只针对这个类,所以我试图将具体和通用分开。

我想避免将泛型的内容复制粘贴到每个特定的验证中。鉴于这种通用/特定的“或”发生在几个类中。

有什么办法可以做到这一点?

4

1 回答 1

1

您可以创建 SpecificValidationAttribute 并从 GenericValidationAttribute 继承它。例如

    public class GenericValidationAttribute: ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var obj = validationContext.ObjectInstance as IBaseObject;
            if(obj == null) return ValidationResult.Success;
            if(obj.content < 0)
               return new ValidationResult("Content have to be greater than zero!");
             return ValidationResult.Success;
        }
   }

    public class SpecificValidationAttribute: GenericValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var res = base.IsValid(value, validationContext);
            if(res != ValidationResult.Success) return res;

            // Do some specific validation
            // ---- 
            return ValidationResult.Success;
        }
    }
于 2016-02-19T17:41:45.490 回答