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