Pergunta

Dando uma olhada na seguinte pergunta, Uso do mundo real de atributos .NET personalizados Como você implementaria a solução proposta pelo @esteban?

Estou um pouco confuso sobre quando e onde o código seria executado, eu acho. Você poderia fornecer uma boa amostra de código.

Eu já fiz essa pergunta antes, mas não a expressou corretamente ... acho que ...

Foi útil?

Solução

Com relação à pergunta/resposta que você faz referência, presumo que haveria algum código que seja executado na camada de dados ou na própria classe que faça validação. Esse código usaria a reflexão sobre o objeto que está sendo validado para encontrar as propriedades com diferentes atributos e executar a lógica de validação específica associada a esse atributo nessa propriedade.

Pode parecer algo como o seguinte:

 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 ) );
       }
 }

Outras dicas

No envio (salvar) do formulário HTML (formulário de vitória), você volte a classe de cliente alterada. Para cada propriedade, você verifica se possui atributo personalizado (herdado da ValidationAttribute ou implementando a interface IVALIDOR ou algo assim) associado a ele. Para cada uma dessas propriedades, você chama o método de atributo validate (crie a classe de validação apropriada e ligue para o método Validate) no valor da propriedade.

Você usaria a reflexão:

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;
     }
}

Se o membro atribuído for um campo, você usaria FieldInfo, conforme usado no exemplo. Se for uma propriedade, você usaria PropertyInfo, os membros de FieldInfo e PropertyInfo são praticamente iguais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top