我有一个使用validation属性注释的属性。 为什么在属性的IsValid方法之前调用属性的setter,更重要的是如何在设置值之前让它进行验证?
这是一个草绘的代码模型,用于查看validator属性的外观:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class MyAttribute: ValidationAttribute
{
public override bool IsValid(object value)
{
...
}
}
以下是属性在属性上的使用方式:
[MyAttribute]
public string MyProperty
{
get { ... }
set { ... }
}
答案 0 :(得分:1)
我假设您正在谈论ValidationAttribute
命名空间中的DataAnnotations
?这些属性用于通常描述验证要求,没有任何特定的规定模型。
但是,在许多情况下,构建一个对象或一组对象是有意义的,然后进行调用以询问"这现在是否有效?" - 当然,在这种情况下,在设置了属性值后,对IsValid
方法的调用就会很好。
通常,属性是被动的 - 直到某些东西以编程方式实际访问属性并对其执行某些操作时,属性中的任何代码都不会运行。没有通用的方法来编写一个属性,说明"当调用附加了该属性的成员时,首先运行这段代码"。