Привет всем!
Как можно из кода макроса уровня класса удалить некоторые атрибуты (не макро-, а обычные), заданные для целевого класса?
Дело в том, что для настройки работы моего макроатрибута нужно передать довольно много информации, точнее много наборов
почти однотипных данных. Кажется естественным передавать их через атрибуты — так код легче читать, чем если всё передавать через параметры макроса. Вот пример (без особого смысла, но идею иллюстрирует)
[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
{
}
Всё работает нормально, но есть две проблемы. Во-первых, для каждого вида атрибутов надо написать класс, а это делать лень, поскольку всё равно после компиляции атрибут ни для чего не используется. И к тому же при добавлении новых свойств в атрибут его код придётся изменять. А если из объявлений все упоминания об атрибуте поудалять, то есть надежда, что компилятор не станет его искать класс. Во-вторых, в конце концов мой класс оказывается помечен десятками экземпляров одного и того же атрибута. Как-то это бестолково, вот и хочется лишние атрибуты выбросить.
Спасибо.