È possibile utilizzare Type.GetType(string) per riflettere una classe. Type
ha metodi per scoprire altri membri, incluso un metodo, disponibili per quel tipo.
Un trucco, tuttavia, è che GetType
desidera un nome qualificato dell'assemblaggio. Se si utilizza solo il nome della classe stessa, si presume che si stia facendo riferimento all'assieme corrente.
Quindi, se si voleva trovare il tipo in tutti gli assembly caricati, si può fare qualcosa di simile (utilizzando LINQ):
var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name == className
select type);
Naturalmente, ci possono essere più ad esso che quello, in cui si Voglio riflettere sugli assembly di riferimento che potrebbero non essere ancora caricati, ecc.
Come per determinare gli spazi dei nomi, la riflessione non li esporta distintamente. Invece, dovreste fare qualcosa di simile:
var namespaceFound = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Namespace == namespace
select type).Any()
Mettere tutto insieme, devi avere qualcosa di simile:
var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name == className && type.GetMethods().Any(m => m.Name == methodName)
select type).FirstOrDefault();
if (type == null) throw new InvalidOperationException("Valid type not found.");
object instance = Activator.CreateInstance(type);
Ricordatevi di indicare la risposta più appropriata come risposta. –