Un piccolo tip che magari vale la pena pubblicare su
UGIdotNET. Se avete la necessità di rilevare tutti i tipi definiti in un
assembly, lo si può fare banalmente tramite Reflection.
public static List<Type> GetAllAvaiableRules()
{
// Type classRuleBase = typeof(RuleBase);
List<Type> ret = new List<Type>();
Assembly janky = Assembly.GetExecutingAssembly();
Type[] all = janky.GetTypes();
for (int i = 0; i < all.Length; i++)
// if (all[i].BaseType.Equals(classRuleBase))
ret.Add(all[i]);
return(ret);
}
Questo blocco di codice ritorna una List<Type> definiti nell'assembly
corrente. Nulla di particolarmente complicato. La cosa interessante è che
possiamo ottenere l'elenco dei tipi che ereditano da una classe base: basta
discommentare le due righe. La prima dice qual'è il tipo della classe
base. La classe Type espone una proprietà
BaseType che ci dice per l'appunto qual'è il tipo che cui
deriva. Basta un semplice if ed il gioco è fatto.
Breve disgressione sul perchè mi serve. Sto scrivendo, tempo permettendo, un
editor a design-time per la Janky.Validation. Senza dettagliare troppo: ho
bisogno di una ComboBox che mi elenchi tutte le regole definite nella
Janky.Validation. Invece di crearlo a mano, lo faccio via Reflection, chiedendo
appunto tutte le classi che ereditano da RuleBase. La classe RuleBase va
l'override di ToString(), per cui con un banale data-binding la ComboBox è bella
che pronta!
powered by IMHO 1.2