Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2017, 05:45
Avatar de bookmaster
bookmaster
 
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 23 años, 1 mes
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