TypeDescriptor.AddAttributes () remplace l'INSEAD attribut actuel de l'ajouter
-
10-10-2019 - |
Question
Je cette partie de code:
var hasAttribute = TypeDescriptor.GetAttributes(property.DeclaringType).OfType<CrmTypeAttribute>()
.Any((attr)
=> ((CrmTypeAttribute)attr).Name == property.Name);
if (!hasAttribute)
{
var crmTypeAttribute = new CrmTypeAttribute(property.Name, crmType);
TypeDescriptor.AddAttributes(property.DeclaringType, crmTypeAttribute);
}
Il a deux problèmes:
- Pour une raison OfType retourne un IEnumerable vide bien qu'il doit retourner les bons attributs de ce type, et j'ai vérifié. Ils existent.
- Ceci est le grave problème. Au lieu d'ajouter l'attribut remplace l'ancien attribut du même type avec crmTypeAttribute. J'ai marqué AllowMultiple pour être vrai.
Quelqu'un peut-il me dire quel est le problème avec ce code?
EDIT:
Pour une raison quelconque, il permet d'ajouter un seul attribut d'un type d'attribut, j'ai ajouté un autre type d'attribut lors de l'exécution et cela a fonctionné.
Autres conseils
Je pense que votre problème vient du fait que vous ne tenez pas compte du TypeDescriptionProvider
retour de l'appel AddAttributes
.
De réflecteur sur TypeDescriptor.AddAttributes
:
Ajoute des attributs de niveau classe à la cibler le type de composant.
Paramètres
type :. La
Type
du composant cibleAttributs :. Un tableau d'objets
Attribute
ajouter à la classe du composantValeur de retour :. La
TypeDescriptionProvider
nouvelle qui a été utilisé pour ajouter les attributs spécifiés
Il y a toujours une nouvelle instance de TypeDescriptionProvider
créé lors de l'appel de cette méthode de statique. Vous devez compter sur cette instance de fournisseur nouvellement créé lors de l'ajout d'attributs supplémentaires et l'interrogation aussi pour les attributs récemment ajoutés.