Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2012, 09:10
Avatar de Nekeniehl
Nekeniehl
 
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 10 meses
Puntos: 6
Pregunta Instanciar clases con reflection.

Hi gurus de la programación, hoy vengo con una duda, os la expongo a continuación:

Tengo una nested class, sencillita, que forma parte de otra nested class, que forma parte de la clase principal:

Edit
Bueno por cuestiones laborales tengo que borrar las dos clases, pero se queda la función que es la que "representa" mis dudas
/Edit


Ahora tengo un método, que me rellena la clase principal dependiendo de los valores que tengo en un diccionario:

Código C#:
Ver original
  1. private void FillClass(Object inObject, Dictionary<String, String> inValues)
  2.         {
  3.             Type oType = inObject.GetType();
  4.             PropertyInfo[] infos = oType.GetProperties();
  5.  
  6.             foreach (PropertyInfo info in infos)
  7.             {
  8.                 String pName = info.Name;
  9.  
  10.                 if (info.PropertyType.Name.Contains("List"))
  11.                 {
  12.                     pName = pName.Substring(0, pName.IndexOf("List"));
  13.                     if (inValues.ContainsKey(pName.ToLower()))
  14.                     {
  15.                         if (!inValues[pName.ToLower()].Equals(""))
  16.                         {
  17.                             var convert = (IList)info.GetValue(inObject, null);
  18.  
  19.  
  20.                             Type t = convert.GetType().GetGenericArguments()[0];
  21.                             Object obj = (Object)Activator.CreateInstance(t, inValues["jahresverbrauchsprognose"]);
  22.  
  23.  
  24.                             convert.Add(obj);
  25.                         }
  26.                     }
  27.                 }
  28.                 else
  29.                     if (inValues.ContainsKey(pName.ToLower()))
  30.                     {
  31.                         info.SetValue(inObject, inValues[pName.ToLower()], null);
  32.                     }
  33.             }
  34.         }

Escenario:

-Los tipos de datos con los que trabajo en la clase principal son: String, DateTime y List<T> (T= Objecto complejo)

-Con los String no tengo problema, como veis en el "else" me pone los valores en el objeto que está instanciado antes de llamar a la función (lo paso por parametro)

-Con los DateTime tampoco hay problema porque solo están en la clase principal.

Problema:
-Las listas de objetos complejos: Como veis en las separaciones que he señalado en el segundo nivel es con la que estoy "Testeando" he intentando solucionar el problema.

La cosa es que el problema esta a medio solucionar, el objeto se crea, lo añado a la lista, y mas adelante, esa lista, la pongo en el sitio al que pertenece en el segundo nivel pero, como veis, no es genérico:

Que pasa cuando la nested class pertinente no tiene parametros en el constructor? como puedo saber si tiene parametros en el constructor sin que me lo diga una excepcion? Como puedo saber que parámetros me pide? Teneis una solución mejor que no sea hacerlo a mano clase por clase (por eso estoy usando reflection), bueno, gracias de antemano, seguiré trabajando mientras tanto a ver si encuentro una solución. Saludos
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)

Última edición por Nekeniehl; 28/11/2012 a las 10:06