예제 #1
0
        /// <summary>
        /// Método que genera los setters 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étodoSetDinámico).</returns>
        public static IPropertySetterDictionary GetPropertySetters(Type type, bool cache)
        {
            //Si los Setters ya habian sido creados se devuelven.
            PropertySetterDictionary setters = GetSettersFromCache(type);

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

            //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 Set obtenido por reflection
            Dictionary <string, PropertySetter> internalSetters = new Dictionary <string, PropertySetter>(props.Length);

            foreach (PropertyInfo pi in props)
            {
                //Obtenemos en 'setter' el método set dinámico para el atributo o propiedad 'pi'.
                PropertySetter setter = GetPropertySetter(pi);
                if (setter != null)
                {
                    internalSetters.Add(pi.Name.ToLower(), setter);
                }
            }

            setters = new PropertySetterDictionary(internalSetters);

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