Что нужно видеть атрибуты? Если это такие вещи, как привязка данных и т. Д., TypeDescriptor
должно работать:
TypeDescriptor.AddAttributes(type, attribs);
TypeDescriptor.AddAttributes(instance, attribs);
Это влияет только на System.ComponentModel
использование (не прямое отражение), но этого достаточно часто - например, вы можете связать TypeConverter
с помощью вышеупомянутого.
Если под «атрибутами» вы подразумеваете «свойства», то (опять же, что касается привязки данных) TypeDescriptor
также имеет потенциал там - но это нетривиально; вам нужно либо реализовать ICustomTypeDescriptor
для объекта, либо написать CustomTypeDescriptor
для типа - и в любом случае вам нужно написать собственную реализацию PropertyDescriptor
(часто с использованием словаря для каждого экземпляра и т. д.). Это будет использоваться всем, что использует:
// only works if you use TypeDescriptionProvider
PropertyDescriptorCollection typeProps = TypeDescriptor.GetProperties(type);
// works via TypeDescriptionProvider or ICustomTypeDescriptor
PropertyDescriptorCollection objProps = TypeDescriptor.GetProperties(obj);
Опять же, это охватывает широкий спектр привязки данных и аналогичные сценарии. Например, см. Здесь - однако это далеко не тривиально. Пример использования (по ссылке) добавляет два свойства во время выполнения:
Bag.AddProperty<int>("TestProp", new DefaultValueAttribute(5));
Bag.AddProperty<string>("Name");