Antes o después tenemos que hacer aplicaciones que carguen dlls. El problema es que los Assemblys de .Net, aunque tenga la extensión dll, no son dlls de win32, por lo que el procedimiento “habitual” de carga no funciona.
Imaginad que tenemos la dll “MiExtension.dll” en C:\ (espero que nadie ponga en una aplicación real la ruta absoluta… esto es un ejemplo). De esa dll queremos cargar la clase “Controlador”.
Assembly miExtensionAssembly = Assembly.LoadFile(@"C:\MiExtension.dll");
Type miExtensionType = miExtensionAssembly.GetType("MiAplicacion.Controlador");
object miExtensionObjeto = Activator.CreateInstance(miExtensionType);
ITipoQueSea objetoFinal = (ITipoQueSea)miExtensionObjeto;
La primera línea carga el assembly, la segunda obtiene el tipo de la clase que se quiera (ojo, hay que darle toda la dirección del namespace, “Controlador” a secas no hubiera servido), la tercera instancia el objeto con el constructor por defecto y en la cuarta almaceno el Object con el tipo que sea.
Si necesitamos instanciar el objeto con un método que reciba parámetros, tendíamos que llamar a CreateInstance con dos parámetros, el primero el tipo (como en el ejemplo) y el segundo un array de Objects con los parámetros ordenados.
Compa.. tengo una duda con tu codigo.
es con respecto a la cuarta linea.
ya pude abrir el assembly lo instancio,
pero como invoco uno de los metodos del assembly
MUCHISIMAS GRACIAS ME SIRVIO MUCHISIMO… ME HAS RESUELTO UN GRAN DUDA..
Para llamar a un método se hace lo siguiente:
miExtensionObjeto.GetType().InvokeMember(«NombreMétodo», BindingFlags.InvokeMethod, Type.DefaultBinder, miExtensionObjeto, null);
el último null es si el método no lleva parámetros.
Saludos