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); }
/// <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(); }
/// <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; }
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); }
/// <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; }
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(); }
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)); }
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); }
public DynamicPropertyCacheEntry(PropertyGetterDelegate getter, PropertySetterDelegate setter) { Getter = getter; Setter = setter; }
/// <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); }
private ClassPropertyGetter(PropertyGetterDelegate getter) { Debug.Assert(getter != null); _getter = getter; }
public PropertyCacheEntry(Type type, PropertyGetterDelegate getter, PropertySetterDelegate setter) { PropertyType = type; Getter = getter; Setter = setter; }