2010-08-22 5 views
0

en particulier lors de la substitution d'Asp.net MVC ValidationAttribute, est-il possible de connaître le nom de classe dont le champ est marqué d'un attribut? (AttributeUsage est AttributeTargets.Property)Attribut C#: comment connaître le nom de classe dont le champ est marqué

public class UniqueAttribute: ValidationAttribute 

     public override bool IsValid(object value) 
     { 
      // how to know which class has this attribute? 
     } 

Répondre

1

Étant donnée une instance d'un attribut, il est impossible de déterminer quelle classe, champ, méthode, etc ... l'origine de cet attribut. Principalement parce qu'il n'a pas besoin d'être attaché à un. Tous les attributs peuvent être créés comme un objet normal et donc ne pas être attaché à quoi que ce soit

var instance = new UniqueAttribute(); 

Vous devrez peut-être utiliser un constructeur différent, mais il faut exister ou il ne pouvait pas être appliquée à un membre en premier lieu .

Cependant, il est possible de passer à l'inverse. Donné un membre ou un type pour savoir si un attribut donné lui a été appliqué. Par exemple, en supposant qu'il existe une instance unique de UnqiueAttribute attachée au type SomeType, ce code le récupérera.

var type = typeof(SomeType); 
var attrib = (UniqueAtrtibute)type.GetCustomAttributes(typeof(UnqiueAttribute),true)[0]; 
Questions connexes