Программно добавить атрибут к методу или параметру
Я могу использовать TypeDescriptor.AddAttributes, чтобы добавить атрибут к типу во время выполнения. Как сделать то же самое для метода и параметра? (возможно, 2 отдельных вопроса...)
Ответы
Ответ 1
TypeDescriptor.AddAttributes
влияет только на конкретный случай использования; т.е. изнутри System.ComponentModel
. Для остальной части отражения он ничего не знает о дополнительном атрибуте. И действительно, System.ComponentModel
действительно не применяется к методам или параметрам.
Итак, короче говоря; вы не можете. Вам нужно будет хранить эту информацию в другом месте (на заказ) или добавить ее во время компиляции.
Ответ 2
Как видно из анализа класса TypeDescriptor
в рефлекторе, метод .AddAttributes
внутренне вызывает метод .AddProvider
. Экземпляр TypeDescriptionProvider
, переданный ему, фактически отвечает за предоставление метаданных. Вы можете попробовать добавить атрибут [TypeDescriptionProviderAttribute] к вашему классу и реализовать собственный поставщик, исходя из класса TypeDescriptionProvider
. Как указано в документации, переопределяя TypeDescriptionProvider.CreateInstance
, вы можете предоставить объект-заменитель, у которого есть все необходимые атрибуты. Я подозреваю, что атрибуты, применяемые к методам внутри типа подстановки, также вступят в силу. Тем не менее, я сам не пробовал, поэтому не стесняйтесь экспериментировать...