public void SetValue(object instance, object value)
            {
                if (SetValueFn == null)
                {
                    return;
                }

                if (!Type.InstanceOfType(value))
                {
                    lock (this)
                    {
                        //Only caches object converter used on first use
                        if (ConvertType == null)
                        {
                            ConvertType    = value.GetType();
                            ConvertValueFn = TypeConverter.CreateTypeConverter(ConvertType, Type);
                        }
                    }

                    if (ConvertType.InstanceOfType(value))
                    {
                        value = ConvertValueFn(value);
                    }
                    else
                    {
                        var tempConvertFn = TypeConverter.CreateTypeConverter(value.GetType(), Type);
                        value = tempConvertFn(value);
                    }
                }

                SetValueFn(instance, value);
            }
Пример #2
0
        /// <summary>
        /// Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            Guard.ArgumentNotNull(propertyInfo, "propertyInfo", "You cannot create a dynamic property for a null value.");

            this.propertyInfo = propertyInfo;
            getter = DynamicReflectionManager.CreatePropertyGetter(propertyInfo);
            setter = DynamicReflectionManager.CreatePropertySetter(propertyInfo);
        }
Пример #3
0
        /// <summary>
        /// Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            Guard.ArgumentNotNull(propertyInfo, "propertyInfo", "You cannot create a dynamic property for a null value.");

            this.propertyInfo = propertyInfo;
            getter            = DynamicReflectionManager.CreatePropertyGetter(propertyInfo);
            setter            = DynamicReflectionManager.CreatePropertySetter(propertyInfo);
        }
        public AssignmentEntry(string name, AssignmentMember @from, AssignmentMember to)
        {
            Name = name;
            From = @from;
            To   = to;

            GetValueFn = From.GetGetValueFn();
            SetValueFn = To.GetSetValueFn();
        }
Пример #5
0
        public AssignmentEntry(string name, AssignmentMember @from, AssignmentMember to)
        {
            Name = name;
            From = @from;
            To = to;

            GetValueFn = From.GetGetValueFn();
            SetValueFn = To.GetSetValueFn();
        }
Пример #6
0
        /// <summary>
        ///     Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            AssertUtils.ArgumentNotNull(propertyInfo, "You cannot create a dynamic property for a null value.");

            _propertyInfo = propertyInfo;
            var pi = GetOrCreateDynamicProperty(propertyInfo);
            _getter = pi.Getter;
            _setter = pi.Setter;
        }
Пример #7
0
        public AssignmentEntry(string name, AssignmentMember @from, AssignmentMember to)
        {
            Name = name;
            From = @from;
            To   = to;

            GetValueFn     = From.GetGetValueFn();
            SetValueFn     = To.GetSetValueFn();
            ConvertValueFn = TypeConverter.CreateTypeConverter(From.Type, To.Type);
        }
Пример #8
0
        /// <summary>
        /// Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            AssertUtils.ArgumentNotNull(propertyInfo, "You cannot create a dynamic property for a null value.");

            this.propertyInfo = propertyInfo;
            DynamicPropertyCacheEntry pi = GetOrCreateDynamicProperty(propertyInfo);

            getter = pi.Getter;
            setter = pi.Setter;
        }
Пример #9
0
        /// <summary>
        ///     Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            AssertUtils.ArgumentNotNull(propertyInfo, "You cannot create a dynamic property for a null value.");

            _propertyInfo = propertyInfo;
            var pi = GetOrCreateDynamicProperty(propertyInfo);

            _getter = pi.Getter;
            _setter = pi.Setter;
        }
        static AttributeKeyBinder()
        {
            //todo: replace with function to get and set pk values in repository

            var pk = typeof(TEntity).GetProperties(BindingFlags.Instance | BindingFlags.Public)
                     .FirstOrDefault(m => m.GetCustomAttributes(true).Any(n => n is KeyAttribute));

            if (pk == null)
            {
                throw new InvalidOperationException(
                          $"Unable to resolve the primary key field of entity {typeof(TEntity).Name} to build its getter and setter functions.");
            }

            GetterFn = pk.GetPropertyGetterFn();
            SetterFn = pk.GetPropertySetterFn();
        }
Пример #11
0
        public static ClassPropertyGetter <TReflected, TProperty> Create(PropertyInfo property)
        {
            if (property == null)
            {
                throw new ArgumentNullException("property");
            }

            if (typeof(TReflected) != property.ReflectedType)
            {
                throw new ArgumentException("The property's ReflectedType must exactly match TReflected.", "property");
            }

            if (typeof(TProperty) != property.PropertyType)
            {
                throw new ArgumentException("The property's PropertyType must exactly match TProperty.", "property");
            }

            if (!property.CanRead)
            {
                throw new ArgumentException("The property must be readable.", "property");
            }

            if (property.GetIndexParameters().Length != 0)
            {
                throw new ArgumentException("The property must not have index parameters.", "property");
            }

            MethodInfo getMethod = property.GetMethod;

            Debug.Assert(getMethod != null);

            if (getMethod.IsStatic)
            {
                throw new ArgumentException("The property must not be static.", "property");
            }

            Debug.Assert(getMethod.ReflectedType == typeof(TReflected));
            Debug.Assert(!getMethod.ReflectedType.IsValueType);
            Debug.Assert(getMethod.GetParameters().Length == 0);
            Debug.Assert(getMethod.ReturnType == typeof(TProperty));

            PropertyGetterDelegate getter =
                (PropertyGetterDelegate)getMethod.CreateDelegate(typeof(PropertyGetterDelegate));

            return(new ClassPropertyGetter <TReflected, TProperty>(getter));
        }
Пример #12
0
 public void SetValue(object instance, object value)
 {
     if (this.SetValueFn == null)
     {
         return;
     }
     if (!this.Type.InstanceOfType(value))
     {
         lock (this)
         {
             if (this.ConvertType == (Type)null)
             {
                 this.ConvertType    = value.GetType();
                 this.ConvertValueFn = TypeConverter.CreateTypeConverter(this.ConvertType, this.Type);
             }
         }
         value = !this.ConvertType.InstanceOfType(value) ? TypeConverter.CreateTypeConverter(value.GetType(), this.Type)(value) : this.ConvertValueFn(value);
     }
     this.SetValueFn(instance, value);
 }
        /// <summary>
        /// Creates a new instance of the safe property wrapper.
        /// </summary>
        /// <param name="propertyInfo">Property to wrap.</param>
        public SafeProperty(PropertyInfo propertyInfo)
        {
            AssertUtils.ArgumentNotNull(propertyInfo, "You cannot create a dynamic property for a null value.");

            this.propertyInfo = propertyInfo;
            DynamicPropertyCacheEntry pi = GetOrCreateDynamicProperty(propertyInfo);
            getter = pi.Getter;
            setter = pi.Setter;
        }
 public DynamicPropertyCacheEntry(PropertyGetterDelegate getter, PropertySetterDelegate setter)
 {
     Getter = getter;
     Setter = setter;
 }
Пример #15
0
 /// <summary>
 /// Creates a new instance of the safe property wrapper.
 /// </summary>
 /// <param name="propertyInfo">Property to wrap.</param>
 public SafeProperty(PropertyInfo propertyInfo)
 {
     this.propertyInfo = propertyInfo;
     getter            = DynamicReflectionManager.CreatePropertyGetter(propertyInfo);
     setter            = DynamicReflectionManager.CreatePropertySetter(propertyInfo);
 }
Пример #16
0
 public DynamicPropertyCacheEntry(PropertyGetterDelegate getter, PropertySetterDelegate setter)
 {
     Getter = getter;
     Setter = setter;
 }
Пример #17
0
 private ClassPropertyGetter(PropertyGetterDelegate getter)
 {
     Debug.Assert(getter != null);
     _getter = getter;
 }
 public PropertyCacheEntry(Type type, PropertyGetterDelegate getter, PropertySetterDelegate setter)
 {
     PropertyType = type;
     Getter       = getter;
     Setter       = setter;
 }