Ещё вопрос по макросам - как удалить атрибуты?
От: SergASh  
Дата: 02.10.07 20:10
Оценка:
Привет всем!

Как можно из кода макроса уровня класса удалить некоторые атрибуты (не макро-, а обычные), заданные для целевого класса?

Дело в том, что для настройки работы моего макроатрибута нужно передать довольно много информации, точнее много наборов почти однотипных данных. Кажется естественным передавать их через атрибуты — так код легче читать, чем если всё передавать через параметры макроса. Вот пример (без особого смысла, но идею иллюстрирует)
  [Wrapper] // Это макрос. Остальное - обычные атрибуты
  [WrapperField( Name = "order_line_id", TypeName = "long", IsKey = true, IsAutoKey = true )]
  [WrapperKey( IsAuto = false )]
  [WrapperField( Name = "order_id", TypeName = "long", IsKey = true, IsAutoKey = false )]
  [WrapperKey( IsAuto = true )]
  [WrapperField( Name = "order_name", TypeName = "string", IsKey = true, IsAutoKey = true )]
  [WrapperField( Name = "order_desc", TypeName = "string", IsKey = true )]
  [WrapperField( Name = "order_date", TypeName = "DateTime", IsKey = true, IsAutoKey = true )]
  [WrapperField( Name = "is_confirmed", TypeName = "bool" )]
  [WrapperField( Name = "session_id", TypeName = "long", IsKey = true, IsAutoKey = false )]
  [WrapperField( Name = "session_name", TypeName = "string", IsKey = true, IsAutoKey = false )]
  public class OrderEntity
  {
  }

Всё работает нормально, но есть две проблемы. Во-первых, для каждого вида атрибутов надо написать класс, а это делать лень, поскольку всё равно после компиляции атрибут ни для чего не используется. И к тому же при добавлении новых свойств в атрибут его код придётся изменять. А если из объявлений все упоминания об атрибуте поудалять, то есть надежда, что компилятор не станет его искать класс. Во-вторых, в конце концов мой класс оказывается помечен десятками экземпляров одного и того же атрибута. Как-то это бестолково, вот и хочется лишние атрибуты выбросить.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.