J’utilise un atsortingbut personnalisé hérité d’une classe d’atsortingbut. Je l’utilise comme ceci:
[MyCustomAtsortingbute("CONTROL")] [MyCustomAtsortingbute("ALT")] [MyCustomAtsortingbute("SHIFT")] [MyCustomAtsortingbute("D")] public void setColor() { }
Mais l’erreur “Duplicate ‘MyCustomAtsortingbute’ atsortingbute” s’affiche.
Comment créer un atsortingbut autorisé dupliqué?
Collez un AtsortingbuteUsage
sur votre classe d’atsortingbuts (oui, c’est AllowMultiple
de AllowMultiple
) et définissez AllowMultiple
sur true
:
[AtsortingbuteUsage(AtsortingbuteTargets.Method, AllowMultiple = true)] public sealed class MyCustomAtsortingbute: Atsortingbute
AtsortingbuteUsageAtsortingbute ;-p
[AtsortingbuteUsage(AtsortingbuteTargets.Method, AllowMultiple = true)] public class MyAtsortingbute : Atsortingbute {}
Notez toutefois que si vous utilisez ComponentModel ( TypeDescriptor
), il ne prend en charge qu’une seule instance d’atsortingbut (par type d’atsortingbut) par membre; reflection brute prend en charge n’importe quel nombre …
La solution d’Anton est correcte, mais il y a un autre piège .
En bref, à moins que votre atsortingbut attrbiute personnalisé ne remplace TypeId, l’access via PropertyDescriptor.GetCustomAtsortingbutes () ne renverra qu’une seule instance de votre atsortingbut.
Comme alternative, pensez à reconcevoir votre atsortingbut pour permettre une séquence.
[MyCustomAtsortingbute(Sequence="CONTROL,ALT,SHIFT,D")]
ou
[MyCustomAtsortingbute("CONTROL-ALT-SHIFT-D")]
puis parsingz les valeurs pour configurer votre atsortingbut.
Pour un exemple, consultez le code source AuthorizeAtsortingbute dans ASP.NET MVC à l’ adresse http://www.codeplex.com/aspnet .
Par défaut, les Atsortingbute
s se limitent à une seule application sur un seul champ / propriété / etc. Vous pouvez le voir à partir de la définition de la classe d’ Atsortingbute
sur MSDN :
[AtsortingbuteUsageAtsortingbute(..., AllowMultiple = false)] public abstract class Atsortingbute : _Atsortingbute
Par conséquent, comme d’autres l’ont noté, toutes les sous-classes sont limitées de la même manière et si vous avez besoin de plusieurs instances du même atsortingbut, vous devez définir explicitement AllowMultiple
sur true
:
[AtsortingbuteUsage(..., AllowMultiple = true)] public class MyCustomAtsortingbute : Atsortingbute
Sur les atsortingbuts qui autorisent plusieurs utilisations, vous devez également remplacer la propriété TypeId
pour vous assurer que les propriétés telles que PropertyDescriptor.Atsortingbutes
fonctionnent comme prévu. La méthode la plus simple consiste à implémenter cette propriété pour renvoyer l’instance d’atsortingbut elle-même:
[AtsortingbuteUsage(..., AllowMultiple = true)] public class MyCustomAtsortingbute : Atsortingbute { public override object TypeId { get { return this; } } }
(Poster cette réponse non pas parce que les autres ont tort, mais parce que c’est une réponse plus complète / canonique.)
Après avoir ajouté AtsortingbuteUsage, assurez-vous d’append cette propriété à votre classe Atsortingbute
public override object TypeId { get { return this; } }