1

看看以下问题,自定义 .NET 属性的真实世界使用您将如何实施@Esteban 提出的解决方案?

我对何时何地执行代码感到有点困惑。您能否提供一个好的代码示例。

我以前问过这个问题,但没有正确表达我想是的......

4

3 回答 3

3

关于您引用的问题/答案,我假设会有一些代码在数据层或在进行验证的类本身中运行。该代码将对正在验证的对象使用反射来查找具有不同属性的属性,并在该属性上运行与该属性关联的特定验证逻辑。

它可能如下所示:

 public void Validate( object obj )
 {
       foreach (var property in obj.GetType().GetProperties())
       {
            var attribute = property.GetCustomAttributes(typeof(ValidationAttribute), false);
            var validator = ValidationFactory.GetValidator( attribute );
            validator.Validate( property.GetValue( obj, null ) );
       }
 }
于 2009-10-08T21:03:47.863 回答
1

在提交(保存)html 表单(win 表单)时,您将返回更改后的 Customer 类。对于每个属性,您检查它是否具有与之关联的自定义属性(继承自 ValidationAttribute 或实现 IValiador 接口或类似的东西)。对于每个这样的属性,您调用属性值的 validate 方法(创建适当的验证类并调用 validate 方法)。

于 2009-10-08T21:00:05.343 回答
1

你会使用反射:

public class MyClass
{
     [Description("I'm an attribute!")]
     public int MyField;

     public Attribute GetAttribute(string fieldName)
     {
          FieldInfo field = typeof(MyClass).GetField("MyField");
          Attribute[] attributes = (Attribute[])field.GetCustomAttributes(typeof(Attribute), false);

          DescriptionAttribute desc = (DescriptionAttribute)attributes[0];
          return desc;
     }
}

如果属性成员是一个字段,您将使用FieldInfo,如示例中使用的那样。如果它是一个属性,您将使用、和PropertyInfo的成员几乎相同。FieldInfoPropertyInfo

于 2009-10-08T21:02:10.190 回答