2015-01-27 2 views
-2

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

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

Пример: Класс A украшен атрибутов B во время выполнения, карта Атрибут B приписывать Класс A рассматривается как украшен Attribute А на протяжении всей жизни приложения.

+0

очень сложно определить, что именно вы делаете или пытаетесь сделать, не публикуя все соответствующие коды. – MethodMan

+0

Являются ли классы 'partial'? https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute%28v=vs.110%29.aspx –

+0

Возможно [ICustomTypeDescriptor] (https://msdn.microsoft.com/ru -us/library/system.componentmodel.icustomtypedescriptor% 28v = vs.110% 29.aspx), но я уверен, что это классика [проблема XY] (http://meta.stackexchange.com/questions/66377/ то, что-это-The-ху-проблема). Какая структура? Возможно, это дает другой вариант, о котором вы не знаете. –

ответ

1

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

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

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

+0

Да, я придерживаюсь своего ответа;) Будет добавлен средний слой между каркасом DI и вашей реальной кодовой базой в трудно читаемой (и поддерживающей) архитектуре. Возможно, вы захотите рассмотреть альтернативную схему DI в этом случае, а также проверить, позволяет ли ваша выборка DI создать пользовательские резольверы. –

+1

http://stackoverflow.com/questions/3493640/mef-how-to-manually-configure-export-for-a-contract-implementation нашел то, что я хотел сделать, не убивая архитектуру :) – Kukks

Смежные вопросы