2017-02-22 2 views
3

Я хотел бы использовать отражение C# и настраиваемые атрибуты, чтобы упростить регистрацию серии типов с помощью центрального класса управления (то есть он предоставляет статические методы, принимающие строковый ключ и вызывающие/извлекающие правильный метод/параметр для связанного типа). Рассматривая другие вопросы здесь и пару мест в другом месте, кажется, что лучший способ сделать это - просто перебрать все общедоступные типы сборки - поскольку он предназначен для библиотеки - и проверить, имеет ли каждый тип соответствующий перед добавлением соответствующих значений в базовые словари. Отражение и итерация, безусловно, будут медленными, но я могу жить с ним, так как это должно происходить только один раз.Получение пользовательских атрибутов типа .NET. NET

К сожалению, я не могу понять, как получить атрибут от типа. Для методов и сборок я могу использовать CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base) от System.Reflection.Extensions, но это не обеспечивает перегрузку для Type; то же самое для Assembly.GetCustomAttribute(Assembly, Type) и методов .IsDefined(...), используемых в this question. Othersuggestions использует методы на самом Type, которые от the documentation, похоже, загружены с mscorelib.dll, но, похоже, это не появилось в Intellisense даже после добавления ссылки, и я не уверен, как это взаимодействует .dll. NET Standard, во всяком случае (как в нем, уменьшает ли возможность работать на любых платформах вообще?)

Я пропустил что-то очевидное или мне действительно трудно получить Attribute от Type?

+0

Можете ли вы показать пример того, как вы пытаетесь вызвать 'GetCustomAttributes()'? –

+0

@ RenéVogt Вот что: 'CustomAttributeExtensions.GetCustomAttribute (base)' was for ('base' - это' Type', который я пытался проверить), но я признаю, что он мог быть лучше обозначен и содержать немного больше контекста. В любом случае, ответ Коннелла ниже работал. – WovenTales

ответ

4

Попробуйте typeof(YourType).GetTypeInfo().GetCustomAttributes();

+0

Ах, вот и все! «Информация» там, по-видимому, очень важна. Теперь мой единственный вопрос - почему я не видел этого ни в одном из других ответов. Благодаря! – WovenTales

+0

Он будет работать с GetType() в .net framework. GetTypeInfo() требуется в ядре .net. –

+0

Это имеет смысл. Мне нравится менталитет .NET Core и Standard, но я не могу не чувствовать, что документация немного тонкая. – WovenTales

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