none
Problemas con Reflexion en C# RRS feed

  • Pregunta

  • Buenas Soy nuevo en c# tengo un problema

    Quiero llamar a una clase de la capa de negocio  en la capa presentacion en un maestro que sera el maestro de listas

    todas  las clases de la capa de negocio tienen la siguiente estructura en el nombre  (Clientes)Negocio lo de parentesis puede cambiar dependiendo de la clase   todas estas  clases  tienen  un metodo llamado Listar_.....( lo de puntos suspensivos puede ser cliente, empleado, etc)

    quiero instanciar  una clase  pasandole el nombre de la clase correspondiente  osea  algo asi : le paso cliente  y el programa debe de buscar en la capa de negocio algo asi

    CapaNegocio.ClienteNegocio.Listar_Clientes.  // el metodo listar clientes  me devuelve una tabla   la  cual la asigno al datagridview  del maestro asi reutilizo este  maestro para hacer  listas  simples  de  mis tablas maestras

    el codigo  es el siguiente

    en el Frm_Maestro_List

    en el constructor


     public Master_list(DataGridView gv, string llave_s, long llave_i, DataTable tabla, string action, string clase, DateTime fecha, string tipo_dato)//constructor para  el master_List
                {
                    try
                    {
     private Assembly testAssembly_1;
            private Assembly testAssembly_2;
            private Type ClaseType_1;
            private Type ClaseType_2;
            private object ClaseInstance_1;
            private object ClaseInstance_2;
            private object[] ClaseEntidades = new object[6];
                      

                        ubicacion = @"U:\SistemaMotorvol\Sistema\CapaPresentacion\bin\Debug\";
                        testAssembly_1 = Assembly.LoadFile(ubicacion + "CapaNegocio.dll");
                        ClaseType_1 = testAssembly_1.GetType("CapaNegocio." + Clase + "Negocio");
                        ClaseInstance_1 = Activator.CreateInstance(ClaseType_1);


               DataTable dt;
                    dt = (DataTable)ClaseType_1.InvokeMember("listar_" + Clase, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic, null, ClaseInstance_1, new object[] {  });
                     Gv.DataSource = dt

                    }
                    catch (  Exception  ex )
                    {
                        MessageBox.Show(ex.Message);

                        throw;

                    }

                }

    Pero me  sale error de que no se puede encontar  el ensamblado  CapaNegocio.ClienteNegocio.Listar_Ciente  como  si no existiera  porfavor 

    AYUDAAAAAAAAAAAAAAAAAAAAAAAAA O alguien que me oriente  con esto derepente lo estoy haciendo mal  o mi idea  es muy alusinate  para concretarse   haber si me AYUDANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN porfavorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    jueves, 9 de agosto de 2012 3:34

Respuestas

  • creo que deberias revisar este articulo

    Archivos de Configuración - Crear secciones propia (3/3)

    alli implemento algo como lo que planteas

    pero hay un tema que no se si estas tratando, aseguras que la dll este en la carpeta \bin\Debug ? porque ojo que sino hay referencia sola no se copia

    en el articulo implemento un Build Event para lograrlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2012 4:38
  • Saludos y no te preocupes que para eso estamos.

    Algo que estoy notando es, por que razon tienes que usar reflexion para llamar a otra capa si con tan solo una referencia a la capa de negocio, que se supone que la capa de vista puede verla, lo resolverias no? no quiero imaginarme que estas programando encima de un componente ajeno o algo asi.

    Creo que con tan solo crear una clase con metodos estaticos y llamar a cada uno cuando quieras podrias resolver esto

    Algo como 

        public class Obtener_Listas
        {
            public static DataTable Listar_Cliente()
            {
                //Aqui invocas tu acceso a datos para obtener la lista de clientes
                return new DataTable("ListaClientes");
            }
    
            public static DataTable Listar_Otro()
            {
                //Aqui invocas tu acceso a datos para obtener la lista de otro
                return new DataTable("ListaOtro");
            }
        }
    

    con esto te olvidas de esa historia que intentas hacer y tienes los metodos separados

    Saludos


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"

    jueves, 9 de agosto de 2012 15:42

Todas las respuestas

  • creo que deberias revisar este articulo

    Archivos de Configuración - Crear secciones propia (3/3)

    alli implemento algo como lo que planteas

    pero hay un tema que no se si estas tratando, aseguras que la dll este en la carpeta \bin\Debug ? porque ojo que sino hay referencia sola no se copia

    en el articulo implemento un Build Event para lograrlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2012 4:38
  • ok gracias  por responder  lo  revisare  y  te comentare  que tal me  fue
    jueves, 9 de agosto de 2012 15:10
  • Saludos y no te preocupes que para eso estamos.

    Algo que estoy notando es, por que razon tienes que usar reflexion para llamar a otra capa si con tan solo una referencia a la capa de negocio, que se supone que la capa de vista puede verla, lo resolverias no? no quiero imaginarme que estas programando encima de un componente ajeno o algo asi.

    Creo que con tan solo crear una clase con metodos estaticos y llamar a cada uno cuando quieras podrias resolver esto

    Algo como 

        public class Obtener_Listas
        {
            public static DataTable Listar_Cliente()
            {
                //Aqui invocas tu acceso a datos para obtener la lista de clientes
                return new DataTable("ListaClientes");
            }
    
            public static DataTable Listar_Otro()
            {
                //Aqui invocas tu acceso a datos para obtener la lista de otro
                return new DataTable("ListaOtro");
            }
        }
    

    con esto te olvidas de esa historia que intentas hacer y tienes los metodos separados

    Saludos


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"

    jueves, 9 de agosto de 2012 15:42