Per la prima volta in assoluto ho effettivamente dovuto eseguire manualmente la scansione dell'assieme. Mi sono imbattuto in C# - how enumerate all classes with custom class attribute? che mi ha impostato conBest practice per eseguire la scansione di tutte le classi e metodi per l'attributo personalizzato
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<SomeAttribute>() })
.ToList();
che era abbastanza semplice per espandere verso il livello di metodo
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<SomeAttribute>() })
.ToList();
Dovrei provare a combinare queste 2 per fare questo in una singola scansione, o è che sta cadendo nell'ottimizzazione iniziale? (la scansione verrà eseguita solo all'avvio dell'app)
C'è qualcosa di diverso che sarebbe più ottimale fare per la scansione dei metodi poiché ci sono molti più metodi dei tipi negli assiemi?
Io vado a scommettere che l'enumerazione dei gruppi e dei tipi sta per essere molto più veloce di trovare e istanziare i tuoi attributi, in modo tale che il caching delle assemblee e tipi è sarà inutile – Gabe