Получить все типы атрибутов в сборке (отражение) - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь получить все атрибуты определенного типа, присутствующие в сборке. В моем конкретном случае c у меня есть атрибуты контроллера и другие атрибуты действий (MVC). С помощью этого кода я могу получить то, что хочу, но я совершенно уверен, что есть способ избежать объединения

var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
    .SelectMany(x => x.GetCustomAttributes<MyAttribute>()).ToList();
myAttributes = myAttributes.Union(assemblyTypes
    .SelectMany(x => x.GetMethods())
    .SelectMany(x => x.GetCustomAttributes<MyAttribute>())).ToList();
myAttributes = myAttributes.Distinct().ToList();

1 Ответ

1 голос
/ 09 мая 2020

У нас нет метода отражения, который объединяет родительский тип и его члены, поэтому лучшим решением является моделирование этого поведения с помощью Append следующим образом:

var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
    .SelectMany(x => x.GetMethods().Cast<MemberInfo>().Append(x))
    .SelectMany(x => x.GetCustomAttributes<MyAttribute>())
    .Distinct().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...