none
ayuda con invocacion de metodos utilizando system.reflection RRS feed

  • Pregunta

  • Hola a todos, estoy en un proyecto en el cual estoy haciendo uso de system.reflection, pero tengo un problema, haber les explico, primero con algo simple que si me corre, luego ya lo que no me funciona.

    Este es un método simple:

            public void operacion(int a, int b)
            {
                Console.WriteLine(a * b);
            }

    y con reflection lo puedo invocar así:

                        MethodInfo m = tipo.GetMethod("operacion");
    
                        object[] p = { 1, 2 };
    
                        m.Invoke(objOperacion, p);

    Pero ya en sistemas mas complejos la invocación de métodos ya no se me hace tan simple, por ejemplo tengo el siguiente método:

            public bool Execute(string p1, string p2, long p3, string p4, out short p5, out string p6, out string p7)
            {
                estado = 1;
                mensaje = xmlSalida = "";
                return true;
            }


    En un proyecto normal lo invocaría así:

    bool resultado = i4XYZ.Execute(p1, p2, p3, p4, out p5, out p6, out p7);

    donde resultado agarraría un valor, y el valor de p5, p6 y p7 seria actualizable dentro del método.

    AHORA SI VIENE EL PROBLEMA, COMO INVOCO ESTE TIPO DE METODOS EN REFLECTION.

    • Como obtengo el valor booleano que me retorna el método.
    • Como mando y recupero los parámetros de salida (p5, p6 y p7)

    Espero haberme explicado bien, este medio difícil pero lo lograre (estoy haciendo un núcleo de un sistema de servicios, donde la funcionalidad se agregue simplemente agregando un DLL a una BD, así no seria necesario tocar el núcleo y menos publicar con cada actualización que exista).


    Roy Sillerico

    lunes, 12 de octubre de 2015 23:03

Respuestas

  • hola

    podria ser algo como esto

    MethodInfo m = tipo.GetMethod("Execute"); object[] p = { "1", "2", 3, "4", null, null, null }; object result = m.Invoke(objOperacion, p);

    bool bResult = (bool)result;

    if(result){

    short p5 = p[4];

    string p6 = p[5];

    string p7 = p[6];

    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de octubre de 2015 0:04
  • Solo una observación: Dado que "p" es de tipo Object, se necesitan unos "cast" para extraer los parámetros out:

    if (result)
    {
       short p5 = (short)p[4];
       string p6 = (string)p[5];
       string p7 = (string)p[6];
    } 

    martes, 13 de octubre de 2015 7:08

Todas las respuestas

  • hola

    podria ser algo como esto

    MethodInfo m = tipo.GetMethod("Execute"); object[] p = { "1", "2", 3, "4", null, null, null }; object result = m.Invoke(objOperacion, p);

    bool bResult = (bool)result;

    if(result){

    short p5 = p[4];

    string p6 = p[5];

    string p7 = p[6];

    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de octubre de 2015 0:04
  • Solo una observación: Dado que "p" es de tipo Object, se necesitan unos "cast" para extraer los parámetros out:

    if (result)
    {
       short p5 = (short)p[4];
       string p6 = (string)p[5];
       string p7 = (string)p[6];
    } 

    martes, 13 de octubre de 2015 7:08