Beispiel #1
0
        /// <summary>
        /// Gets the property reader.
        /// </summary>
        private static IDelegatePropertyReader GetPropertyReader(PropertyInfo property, TypeMetaData context)
        {
            IDelegatePropertyReader actualReader = DelegatePropertyFactory.CreatePropertyReader(property);

            if (actualReader != null)
            {
                context.PropertyReaders.Add(property, actualReader);
            }
            return(actualReader);
        }
Beispiel #2
0
        /// <summary>
        /// Creates the wrapper object property wrapper.
        /// </summary>
        private static PropertyDescriptor CreateWrapperObjectPropertyWrapper(TypeMetaData context, PropertyInfo property)
        {
            IDelegatePropertyReader actualReader = GetPropertyReader(property, context);
            IDelegatePropertyWriter actualWriter = GetPropertyWriter(property, context);

            Func <object, object>   reader = property.CanRead ? new Func <object, object>(o => actualReader.GetValue(o)) : null;
            Action <object, object> writer = property.CanWrite ? new Action <object, object>((o, v) => actualWriter.SetValue(o, v)) : null;

            DelegatePropertyDescriptor descriptor = new DelegatePropertyDescriptor(
                property.Name,
                property.DeclaringType,
                property.PropertyType,
                reader,
                writer
                );

            return(descriptor);
        }
Beispiel #3
0
 /// <summary>
 /// Creates the property reader.
 /// </summary>
 /// <param name="property">The property.</param>
 /// <returns></returns>
 public static IDelegatePropertyReader CreatePropertyReader(PropertyInfo property)
 {
     IDelegatePropertyReader reader = null;
     if (property != null)
     {
         Type delegateReaderType = typeof(Func<,>).MakeGenericType(property.DeclaringType, property.PropertyType);
         Type readerType = typeof(DelegatePropertyReader<,>).MakeGenericType(property.DeclaringType, property.PropertyType);
         if (property.CanRead)
         {
             MethodInfo propertyGetterMethodInfo = property.GetGetMethod();
             Delegate propertyGetterDelegate = Delegate.CreateDelegate(
                 delegateReaderType,
                 propertyGetterMethodInfo);
             reader = (IDelegatePropertyReader)Activator.CreateInstance(readerType, propertyGetterDelegate);
         }
     }
     return reader;
 }