Впервые в жизни мне действительно потребовалось вручную сканировать сборку. Я наткнулся на C # - как перечислить все классы с помощью настраиваемого атрибута класса? , который поставил меня с помощью
var typesWithMyAttribute =
(from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
let attributes = type.GetCustomAttributes(typeof(SomeAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = type, Attributes = attributes.Cast() })
.ToList();
Который был достаточно простым, чтобы перейти на уровень метода
var methodsWithAttributes =
(from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
from method in type.GetMethods()
let attributes = method.GetCustomAttributes(typeof(SomeAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = type, Method = method,
Attributes = attributes.Cast() })
.ToList();
Должен ли я попытаться объединить эти 2 для сделать это за одно сканирование, или это просто ранняя оптимизация? (сканирование будет выполняться только при запуске приложения)
Есть ли что-то другое, что было бы более оптимальным для сканирования методов, поскольку методов в сборках гораздо больше, чем типов?