Typedescriptor.addattributes () заменяет текущий атрибут Insead на добавление его

StackOverflow https://stackoverflow.com/questions/3997471

Вопрос

У меня есть эта часть кода:

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);
            }

У него две проблемы:

  1. По какой -то причине, что Tothype возвращает пустую подставку, хотя он должен вернуть правильные атрибуты такого типа, и я проверил. Они существуют.
  2. Это серьезная проблема. Вместо того, чтобы добавлять атрибут, он заменяет старый атрибут того же типа CrmtyPeatTribute. Я отметил, что Alluctmultiple будет правдой.

Кто -нибудь может сказать мне, что не так с этим кодом?
РЕДАКТИРОВАТЬ:
По какой -то причине он позволяет добавлять только один атрибут типа атрибута, я добавил еще один тип атрибута во время выполнения, и он работал.

Это было полезно?

Решение 2

Оказывается, атрибут должен переопределить свойство типа класса атрибутов, чтобы не рассматриваться как дублированный.
Видеть здесь Для получения подробной информации это очень скрыто и должно быть упомянуто и в Getattributes.

Другие советы

Я думаю, что ваша проблема проистекает из того факта, что вы игнорируете возвращенных TypeDescriptionProvider от AddAttributes вызов.

От отражателя TypeDescriptor.AddAttributes:

Добавляет атрибуты на уровне класса к типу целевого компонента.

Параметры

тип: Type целевого компонента.

атрибуты: Множество Attribute Объекты, чтобы добавить в класс компонента.

Возвращаемое значение: Недавно созданный TypeDescriptionProvider Это использовалось для добавления указанных атрибутов.

Всегда есть новый TypeDescriptionProvider экземпляр создан при вызове этого статического метода. Вы должны полагаться на этот недавно созданный экземпляр поставщика при добавлении дополнительных атрибутов, а также запроса на недавно добавленные атрибуты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top