Рекомендации по сканированию всех классов и методов на предмет наличия настраиваемых атрибутов

Впервые в жизни мне действительно потребовалось вручную сканировать сборку. Я наткнулся на 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 для сделать это за одно сканирование, или это просто ранняя оптимизация? (сканирование будет выполняться только при запуске приложения)

Есть ли что-то другое, что было бы более оптимальным для сканирования методов, поскольку методов в сборках гораздо больше, чем типов?

5
задан Community 23 May 2017 в 10:28
поделиться