Foros del Web » Programación para mayores de 30 ;) » .NET »

Crear una instancia desde un string (C#)

Estas en el tema de Crear una instancia desde un string (C#) en el foro de .NET en Foros del Web. Hola: Os comento estoy haciendo un programa para administrar varias tiendas virtuales, de las cuales están en distintos tipos de CMS (Oscommerce, Prestashop, etc), y ...
  #1 (permalink)  
Antiguo 09/06/2017, 05:45
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Crear una instancia desde un string (C#)

Hola:

Os comento estoy haciendo un programa para administrar varias tiendas virtuales, de las cuales están en distintos tipos de CMS (Oscommerce, Prestashop, etc), y el programa hace de interfaz para que desde un mismo sitio se puedan controlar ambas.

El caso es que cada vez que quiero usar un CMS u otro tengo que realizar lo siguiente, imaginaros tener que añadir esas lineas por cada CMS que pueda agregar en un futuro para los diferentes apartados, productos, clientes, etc.....

Y teniendo en cuenta que los nombres de las funciones son las mismas veo un atraso el tener que estar haciéndolo de esa manera.

Código C:
Ver original
  1. switch (TipoCMS)
  2. {
  3.     case 1:
  4.         _DatosSitio = ProductosPrestashop.ListarTodos();
  5.         break;
  6.     case 2:
  7.          _DatosSitio = ProductosOscommerce.ListarTodos();
  8.          break;
  9. }

He creado una clase común que incluye las llamadas (que funciona bien):
Código C#:
Ver original
  1. public class Comun{
  2.         #region Prestashop
  3.         protected Datos.Prestashop.Productos ProductosPrestashop;
  4.         protected Datos.Prestashop.Categorias CategoriasPrestashop;
  5.         protected Datos.Prestashop.Proveedores ProveedoresPrestashop;
  6.         #endregion
  7.         #region Oscommerce
  8.         protected Datos.Oscommerce.Productos ProductosOscommerce;
  9.         protected Datos.Oscommerce.Categorias CategoriasOscommerce;
  10.         protected Datos.Oscommerce.Proveedores ProveedoresOscommerce;
  11.         #endregion
  12.  
  13. public Comun()
  14.         {
  15.                 TipoCMS = Convert.ToInt32(row["idSistema"]);
  16.                 switch (TipoCMS)
  17.                 {
  18.                     case 1:
  19.                         ProductosPrestashop = new Datos.Prestashop.Productos();
  20.                         CategoriasPrestashop = new Datos.Prestashop.Categorias();
  21.                         ProveedoresPrestashop = new Datos.Prestashop.Proveedores();
  22.                         break;
  23.                     case 2:
  24.                         ProductosOscommerce = new Datos.Oscommerce.Productos();
  25.                         CategoriasOscommerce = new Datos.Oscommerce.Categorias();
  26.                         ProveedoresOscommerce = new Datos.Oscommerce.Proveedores();
  27.                         break;
  28.                 }
  29.             }
  30.         }
  31. }

He probado a realizarlo de la siguiente manera (la cual falla):
Código C:
Ver original
  1. string NombreCms = "";
  2.             switch (TipoCMS)
  3.             {
  4.                 case 1:
  5.                     NombreCms = "Prestashop";
  6.                     break;
  7.                 case 2:
  8.                     NombreCms = "Oscommerce";
  9.                     break;
  10.             }
  11.             dynamic Productos = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("Datos." + NombreCms + ".Productos");
  12.             _DatosSitio = Productos.ListarTodos();

Pero me genera un error:


Así que ya no se como poder optimizar el código para no repetir las mismas líneas tantas veces.

Si a alguien se le ocurre alguna manera de realizarlo, estaría muy agradecido.

Nota: La aplicación esta en capas:
- Interfaz:
- Procesado: Donde quiero que actúe de esa manera.
- Datos: La que se conecta a la base de datos de MySQL y hace la consulta.

Imagen de la aplicación: Imagen ejemplo.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #2 (permalink)  
Antiguo 09/06/2017, 12:02
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Crear una instancia desde un string (C#)

Después de realizar algunas pruebas más he podido descubrir que si se hace en diferentes "capas" da el error, pero si se hace la llamada a la misma funciona bien.
Dejo un proyecto de ejemplo por si alguien sabe como hacer que funcione. Descarga desde dropbox.


Edito: Después de realizar mas pruebas, puedo hacerlo desde la propia capa de datos ya que en principio no habría problema, pero vamos que si hay manera de hacerlo con independencia de en que "Capa" sea se agradece, puesto que estoy pendiente de separar cada CMS en una Librería independiente.

Gracias nuevamente.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 09/06/2017 a las 13:16

Etiquetas: asp, cliente, instancia, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:52.