107 votes

Comment créer un attribut autorisé en double

J'utilise l'attribut personnalisé hérité de la classe d'attribut. J'utilise comme ça

     [MyCustomAttribute("CONTROL")]
    [MyCustomAttribute("ALT")]
    [MyCustomAttribute("SHIFT")]
    [MyCustomAttribute("D")]
    public void setColor()
{

}
 

Mais l'erreur "Duplicate 'MyCustomAttribute" attribut affiché. Comment créer un attribut autorisé en double?

201voto

Anton Gogolev Points 59794

Collez un attribut AttributeUsage sur votre classe d'attributs (oui, c'est plein à craquer) et définissez AllowMultiple à true :

 [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class MyCustomAttribute: Attribute
 

20voto

Marc Gravell Points 482669

AttributeUsageAttribute ;-p

 [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyAttribute : Attribute
{}
 

Notez cependant que si vous utilisez ComponentModel ( TypeDescriptor ), il ne prend en charge qu'une instance d'attribut (par type d'attribut) par membre; La réflexion brute supporte n'importe quel nombre ...

13voto

mcdrewski Points 191

La solution d'Anton est correcte, mais il y a un autre casse-tête .

En bref, à moins que votre attrbiute personnalisé ne remplace TypeId, puis y accéder via PropertyDescriptor.GetCustomAttributes () ne renverra qu'une seule instance de votre attribut.

3voto

tvanfosson Points 268301

En guise d'alternative, pensez à redéfinir votre attribut pour permettre une séquence.

 [MyCustomAttribute(Sequence="CONTROL,ALT,SHIFT,D")]
 

ou

 [MyCustomAttribute("CONTROL-ALT-SHIFT-D")]
 

Ensuite, analysez les valeurs pour configurer votre attribut.

Pour un exemple, consultez le code source AuthorizeAttribute dans ASP.NET MVC à l’ adresse www.codeplex.com/aspnet .

3voto

Axle Points 299

Après avoir ajouté AttributeUsage, assurez-vous d’ajouter cette propriété à votre classe Attribute.

 public override object TypeId
{
  get
  {
    return this;
  }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X