[Proposal] Helper types for metadata attributes?
От: Sinix  
Дата: 07.01.17 10:32
Оценка:
Про что речь: хелперы для поиска атрибутов в определённом порядке:
1. метод / свойство / событие, затем базовые методы (если метод виртуальный)
2. тип, в котором объявлен метод + базовые типы для него
3. container types + базовые типы для них (если тип из п.2 — nested type)
4. сборка, в которой объявлен тип из п.2.

Зачем надо: позволяет малой кровью создавать очень гибкие системы настроек на атрибутах с учётом приоритета атрибутов (порядок атрибутов, возвращаемых reflection api не документирован, если что).

Пример использования: документация, весь код для этой фичи:
            foreach (var featureAttribute in metadataSource
                .GetMetadataAttributes<CompetitionFeaturesAttribute>()
                .Reverse())
            {
                competitionFeatures.Apply(featureAttribute.GetFeatures());
            }


Пример получения атрибутов в коде:
var attributes = method.GetMetadataAttributes<ISomeInterface>(); // all attributes that implement the interface, including attributes in parent types / container types / assembly

var att2 = type.GetMetadataAttributes<ResourceFileAttribute>(); // ResourceFileAttribute attributes, including attributes in container types / assembly

var att3 = assembly.GetMetadataAttributes<ResourceFileAttribute>(); // ResourceFileAttribute attributes for the assembly


Собсно вопрос: оно нам надо?
Re: [Proposal] Helper types for metadata attributes?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.01.17 21:58
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Про что речь: хелперы для поиска атрибутов в определённом порядке:

S>1. метод / свойство / событие, затем базовые методы (если метод виртуальный)
S>2. тип, в котором объявлен метод + базовые типы для него
S>3. container types + базовые типы для них (если тип из п.2 — nested type)
S>4. сборка, в которой объявлен тип из п.2.

Ну если только не сильно наворачивать. Потому что в сложных сценариях есть специализорованные вещи типа MEF и CodeJam.Ext.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: [Proposal] Helper types for metadata attributes?
От: Sinix  
Дата: 08.01.17 19:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну если только не сильно наворачивать. Потому что в сложных сценариях есть специализорованные вещи типа MEF и CodeJam.Ext.


Закинул, не наворачивая.

Единственный момент, который мне не совсем нравится — порядок атрибутов, объявленных на одном уровне.

Сейчас атрибуты возвращаются в том порядке, в котором они объявлены (тесты подтверждают), но это поведение не документировано и может поменяться в будущем (оно уже ломалось в прошлом, чинили) + не факт, что поведение под mono будет совпадать.

Как вариант, могу добавить перегрузку с параметром Comparer<TAttribute>.

UPD Если несложно, выпусти бету с правками по MetadataAttributes
Отредактировано 08.01.2017 19:22 Sinix . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.