예제 #1
0
        /// <summary>
        /// Método que genera los Getters de un determinado tipo de objeto (clase) y los
        /// devuelve en un diccionario que contiene todas las propiedades de la clase
        /// junto con los métodos creados dinámicamente.
        /// </summary>
        /// <param name="type">Tipo (Clase) del que se obtendran las propiedades.</param>
        /// <param name="cache">Si es true, el Diccionario creado se alamacenará en caché,
        /// en caso contrario, no se almacenará en caché.</param>
        /// <returns>Diccionario de duplas (NombrePropiedad, MétodoGetDinámico).</returns>
        public static IPropertyGetterDictionary GetPropertyGetters(Type type, bool cache)
        {
            //Si los Getters ya habian sido creados se devuelven
            PropertyGetterDictionary getters = GetGettersFromCache(type);

            if (getters != null)
            {
                return(getters);
            }

            //Lo primero obtengo las propiedades de ese tipo (clase).
            //Cada PropertyInfo contiene el tipo y el nombre de una propiedad de la clase (type).
            PropertyInfo[] props = type.GetProperties();

            //Diccionario en el que la clave es el Nombre de la propiedad y el valor el método Get obtenido por reflection
            Dictionary <string, PropertyGetter> internalGetters = new Dictionary <string, PropertyGetter>(props.Length);

            foreach (PropertyInfo pi in props)
            {
                //Obtenemos en 'setter' el método Get dinámico para el atributo o propiedad 'pi'.
                PropertyGetter getter = GetPropertyGetter(pi);
                if (getter != null)
                {
                    internalGetters.Add(pi.Name.ToLower(), getter);
                }
            }
            getters = new PropertyGetterDictionary(internalGetters);

            if (cache)
            {
                AddGettersToCache(getters, type);
            }
            return(getters);
        }
예제 #2
0
 /// <summary>
 /// Añade a la caché los Getters de un tipo determinado por itemType.
 /// </summary>
 /// <param name="getters">Diccionario de Getters a guardar en caché.</param>
 /// <param name="itemType">Tipo del objeto que contiene el diccionario.</param>
 private static void AddGettersToCache(PropertyGetterDictionary getters, Type itemType)
 {
     HttpRuntime.Cache["PropertyGetters_" + itemType.FullName] = getters;
 }