Программно добавить атрибут к методу или параметру

Я могу использовать TypeDescriptor.AddAttributes, чтобы добавить атрибут к типу во время выполнения. Как сделать то же самое для метода и параметра? (возможно, 2 отдельных вопроса...)

Ответы

Ответ 1

TypeDescriptor.AddAttributes влияет только на конкретный случай использования; т.е. изнутри System.ComponentModel. Для остальной части отражения он ничего не знает о дополнительном атрибуте. И действительно, System.ComponentModel действительно не применяется к методам или параметрам.

Итак, короче говоря; вы не можете. Вам нужно будет хранить эту информацию в другом месте (на заказ) или добавить ее во время компиляции.

Ответ 2

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