Создание псевдонимов атрибутов?

Я пытаюсь создать общий уровень между фреймворками, которые я использую, и кодом моего приложения, и меня заблокировала потребность фреймворка в украшении моих классов атрибутами.

Есть ли способ каким-то образом сопоставить атрибуты с другими атрибутами?

Пример: класс A украшен атрибутом B Во время выполнения сопоставление атрибута B с атрибутом A Класс A рассматривается как украшенный атрибутом A на протяжении всего жизненного цикла приложения.


person Andrew Camilleri 'Kukks'    schedule 27.01.2015    source источник
comment
очень сложно точно определить, что вы делаете или пытаетесь сделать, не публикуя весь соответствующий код.   -  person MethodMan    schedule 27.01.2015
comment
Классы partial? msdn.microsoft. ru / en-us / library /   -  person Paul Abbott    schedule 27.01.2015
comment
Возможно, ICustomTypeDescriptor но я почти уверен, что это классическая проблема XY. Что это за рамки? Может быть, это предоставляет какой-то другой вариант, о котором вы не знаете.   -  person Sriram Sakthivel    schedule 27.01.2015
comment
@PaulAbbott Как это поможет?   -  person Sriram Sakthivel    schedule 27.01.2015
comment
Вы не сможете сопоставить атрибуты, но сможете их добавить. Таким образом, класс A может быть украшен атрибутом A (у него также будет атрибут B).   -  person Paul Abbott    schedule 27.01.2015
comment
stackoverflow.com/questions/129285 /   -  person Andrew Camilleri 'Kukks'    schedule 28.01.2015


Ответы (1)


То, что вы пытаетесь сделать, звучит как плохой дизайн. Атрибуты не являются типами среды выполнения, на самом деле они представляют собой просто метаданные типа. Несмотря на то, что некоторые атрибуты позволяют изменять их параметры во время выполнения, это не повлияет на применяемый атрибут.

В Интернете вы найдете решения, предлагающие использовать Reflection.Emit. Обратите внимание, что это скользкая дорожка, и она приведет к очень трудному обслуживанию кода.

Мое личное предложение - создать свой собственный Class B, украшенный как Attribute A, так и Attribute B, а затем использовать внутреннюю логику для объединения всего, что вы хотите связать.

person Stefan Z Camilleri    schedule 27.01.2015
comment
Да, я придерживаюсь своего ответа;) Добавление промежуточного уровня между фреймворком DI и вашей реальной кодовой базой приведет к тому, что архитектура будет трудно читать (и поддерживать). В этом случае вы можете рассмотреть альтернативную структуру DI или посмотреть, позволяет ли выбранная вами структура DI создавать собственные преобразователи. - person Stefan Z Camilleri; 29.01.2015
comment
stackoverflow.com/questions/3493640/ нашел то, что я хотел сделать, не разрушая архитектуру :) - person Andrew Camilleri 'Kukks'; 01.02.2015