为什么调用 ValidationAttribute.IsValid 的时间晚于预期

本文关键字:时间 于预期 IsValid 调用 ValidationAttribute 为什么 | 更新日期: 2023-09-27 18:32:21

我有一个用验证属性注释的属性。为什么在属性的 IsValid 方法之前调用属性上的 setter,更重要的是如何在设置值之前让它进行验证?

下面是一个草图的代码模型,用于查看验证器属性的外观:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class MyAttribute: ValidationAttribute
{       
    public override bool IsValid(object value) 
    {
        ...
    }
}

以下是属性在属性上的使用方式:

[MyAttribute]
public string MyProperty
{
   get { ... }
   set { ... }
}

为什么调用 ValidationAttribute.IsValid 的时间晚于预期

我假设您是在谈论DataAnnotations命名空间中的ValidationAttribute?这些属性通常用于描述验证要求,没有任何特定的规定模型。

但是,在许多情况下,构造

一个对象或一组对象,然后调用询问"现在有效吗?"是有意义的 - 因此,当然,在这种情况下,对 IsValid 方法的调用将在设置属性值后发生。

属性通常是被动的 - 直到某些东西实际以编程方式访问该属性并对其进行某些操作之前,该属性中的任何代码都不会运行。没有通用的方法可以编写一个属性,该属性说"当调用此属性附加到的成员时,请先运行这段代码"。