Puede utilizar Type.GetType(string) para reflejar una clase. Type
tiene métodos para descubrir otros miembros, incluido un método, que están disponibles para ese tipo.
Un truco, sin embargo, es que GetType
quiere un nombre calificado como ensamblador. Si usa solo el nombre de la clase en sí, asumirá que está haciendo referencia al ensamblado actual.
Por lo tanto, si usted quiere encontrar el tipo en todos los ensamblados cargados, se puede hacer algo como esto (usando LINQ):
var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name == className
select type);
Por supuesto, puede haber más que eso, donde Querrá reflejar los ensamblajes a los que se hace referencia que aún no se pueden cargar, etc.
En cuanto a la determinación de los espacios de nombres, la reflexión no los exporta claramente. En su lugar, habría que hacer algo como:
var namespaceFound = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Namespace == namespace
select type).Any()
Poniendo todo junto, usted tendría algo como:
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);
Por favor, recuerde que debe marcar la respuesta más apropiada como respuesta. –