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:

  1. 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.
  2. 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é.

Était-ce utile?

La solution 2

Il s'avère que les besoins d'attributs pour remplacer la propriété TypeId de la classe d'attributs de ne pas être traités comme dupliqué.
Voir pour plus de détails, il est très caché et doit être mentionné dans GetAttributes comme bien.

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 cible

     

Attributs :. Un tableau d'objets Attribute ajouter à la classe du composant

     

Valeur 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top