Personal Website

My Web: MindEchoes.com

Monday, February 16, 2009

Reflexión en C#

Este es un ejemplo de como usar Reflexión en C# para ejecutar un metodo de una DLL o EXE.

Codigo:

using System;
using System.Reflection;

namespace DynamicInvocation
{

public class ReflectionInvocation
{

public static void invokeProcess(string assemblyName,
string method, string impInterface, object[] arguments)
{
Assembly assembly = Assembly.LoadFrom(assemblyName);

// Exploro cada tipo dentro del assembly
foreach (Type type in assembly.GetTypes())
{

if (type.IsClass == true)
{
//Si no implementa la interfaz que se paso como
//parametro, salteo esa clase.
if (type.GetInterface(impInterface) == null)
{
continue;
}

// En cambio, si implementa la interfaz
// creo una instancia del objeto
object implementObject = Activator.CreateInstance(type);

//Invoco dinamicamente el metodo pasado por parametro
object result;
result = type.InvokeMember( method,
BindingFlags.Default
| BindingFlags.InvokeMethod,
null, implementObject, arguments);
}
}
}

}
}

El metodo estatico de esta clase hace lo siguiente.
Recibe 4 parametros:
  • assemblyName = es un String que contiene el nombre de la DLL. (esta DLL se esta leyendo del mismo directorio donde esta ejecutando el codigo en este caso)
  • method = es un String donde se especifica el nombre del método a ejecutar.
  • impInterface = el namespace y nombre de la interfaz que la clase a analizar deberia implementar (Por ejemplo: com.example.Interface)
  • arguments = un array de tipo Object (puede contener toda clase de objetos adentro) que es lo que se le pasara al método que se quiere invocar dinamicamente para el caso de que el metodo requiera de parametros.
Simplemente con este metodo podemos hacer que nuestro codigo ejecute código de una DLL que no "conocemos" en nuestro código compilado, pasandole solamente esos parametros y situando esa DLL en el directorio del programa.

1 comment:

Anonymous said...

Thanks :)
--
http://www.miriadafilms.ru/ купить фильмы
для сайта utopia555.blogspot.com