private static void AddDefaultGetter(PropertyDescriptor descriptor) { if (descriptor.TypeConverter != null) { descriptor.AddBehavior(new DefaultPropertyGetter(descriptor.TypeConverter)); } }
object IDictionaryPropertyGetter.GetPropertyValue( IDictionaryAdapter dictionaryAdapter, string key, object storedValue, PropertyDescriptor property, bool ifExists ) { if (storedValue == null) { var component = dictionaryAdapter.This.ExtendedProperties[property.PropertyName]; if (component == null) { var descriptor = new PropertyDescriptor(property.Property, null); descriptor.AddBehavior(new KeyPrefixAttribute(key)); component = dictionaryAdapter.This.Factory.GetAdapter( property.Property.PropertyType, dictionaryAdapter.This.Dictionary, descriptor ); dictionaryAdapter.This.ExtendedProperties[property.PropertyName] = component; } return(component); } return(storedValue); }
public object GetPropertyValue(IDictionaryAdapter dictionaryAdapter, string key, object storedValue, PropertyDescriptor descriptor, bool ifExists) { var attr = descriptor.Property.GetCustomAttribute <SettingsAttribute>(); if (attr != null) { var behavior = new SettingsBehavior() { KeyPrefix = key, PrefixSeparator = this.PrefixSeparator //attr.PrefixSeparator ?? DEFAULT_PREFIX_SEPARATOR }; var desc = new PropertyDescriptor(new[] { behavior }); desc.AddBehavior(behavior); storedValue = dictionaryAdapter.This.Factory.GetAdapter(descriptor.PropertyType, dictionaryAdapter.This.Dictionary, desc); } if (ValueIsNullOrDefault(descriptor, storedValue)) { var defaultValue = descriptor.Annotations.OfType <DefaultValueAttribute>().SingleOrDefault(); if (IsRequired(descriptor, ifExists)) { throw new ValidationException(string.Format("No valid value for '{0}' found", key)); } else if (defaultValue != null) { storedValue = defaultValue.Value; } } // Convert value if needed. if (storedValue != null && !descriptor.PropertyType.IsAssignableFrom(storedValue.GetType())) { storedValue = descriptor.TypeConverter.CanConvertFrom(storedValue.GetType()) ? descriptor.TypeConverter.ConvertFrom(storedValue) : Convert.ChangeType(storedValue, descriptor.PropertyType); } #if !USE_DAVALIDATOR if (storedValue != null) { var propinfo = descriptor.Property; var context = new ValidationContext(storedValue) { DisplayName = propinfo.Name, MemberName = propinfo.Name }; { var attrs = propinfo.GetCustomAttributes(true).OfType <ValidationAttribute>().ToArray(); Validator.ValidateValue(storedValue, context, attrs); } } #endif return(storedValue); }
/// <summary> /// Copies the behaviors to the other <see cref="PropertyDescriptor"/> /// </summary> /// <param name="other"></param> /// <returns></returns> public PropertyDescriptor CopyBehaviors(PropertyDescriptor other) { var behaviors = dictionaryBehaviors; if (behaviors != null) { var count = behaviors.Count; for (var i = 0; i < count; i++) { var behavior = behaviors[i].Copy(); if (behavior != null) { other.AddBehavior(behavior); } } } return(this); }
private static IDictionary <string, PropertyDescriptor> MergeProperties( IDictionary <string, PropertyDescriptor> source, List <IDictionaryBehavior> behaviors) { int index, count = behaviors.Count; var properties = new Dictionary <string, PropertyDescriptor>(); foreach (var sourceProperty in source) { var property = new PropertyDescriptor(sourceProperty.Value, true); for (index = 0; index < count; index++) { property.AddBehavior(behaviors[index]); } properties[sourceProperty.Key] = property; } return(properties); }
object IDictionaryPropertyGetter.GetPropertyValue(IDictionaryAdapter dictionaryAdapter, string key, object storedValue, PropertyDescriptor property, bool ifExists) { if (storedValue == null) { var component = dictionaryAdapter.This.ExtendedProperties[property.PropertyName]; if (component == null) { var descriptor = new PropertyDescriptor(property.Property, null); descriptor.AddBehavior(new KeyPrefixAttribute(key)); component = dictionaryAdapter.This.Factory.GetAdapter( property.Property.PropertyType, dictionaryAdapter.This.Dictionary, descriptor); dictionaryAdapter.This.ExtendedProperties[property.PropertyName] = component; } return component; } return storedValue; }
public object GetPropertyValue(IDictionaryAdapter dictionaryAdapter, string key, object storedValue, PropertyDescriptor descriptor, bool ifExists) { var attr = descriptor.Property.GetCustomAttribute<SettingsAttribute>(); if (attr != null) { var behavior = new SettingsBehavior() { KeyPrefix = key, PrefixSeparator = this.PrefixSeparator //attr.PrefixSeparator ?? DEFAULT_PREFIX_SEPARATOR }; var desc = new PropertyDescriptor(new[] { behavior }); desc.AddBehavior(behavior); storedValue = dictionaryAdapter.This.Factory.GetAdapter(descriptor.PropertyType, dictionaryAdapter.This.Dictionary, desc); } if (ValueIsNullOrDefault(descriptor, storedValue)) { var defaultValue = descriptor.Annotations.OfType<DefaultValueAttribute>().SingleOrDefault(); if (IsRequired(descriptor, ifExists)) { throw new ValidationException(string.Format("No valid value for '{0}' found", key)); } else if (defaultValue != null) { storedValue = defaultValue.Value; } } // Convert value if needed. if (storedValue != null && !descriptor.PropertyType.IsAssignableFrom(storedValue.GetType())) { storedValue = descriptor.TypeConverter.CanConvertFrom(storedValue.GetType()) ? descriptor.TypeConverter.ConvertFrom(storedValue) : Convert.ChangeType(storedValue, descriptor.PropertyType); } #if !USE_DAVALIDATOR if (storedValue != null) { var propinfo = descriptor.Property; var context = new ValidationContext(storedValue) { DisplayName = propinfo.Name, MemberName = propinfo.Name }; { var attrs = propinfo.GetCustomAttributes(true).OfType<ValidationAttribute>().ToArray(); Validator.ValidateValue(storedValue, context, attrs); } } #endif return storedValue; }
private static IDictionary<string, PropertyDescriptor> MergeProperties( IDictionary<string, PropertyDescriptor> source, List<IDictionaryBehavior> behaviors) { int index, count = behaviors.Count; var properties = new Dictionary<string, PropertyDescriptor>(); foreach (var sourceProperty in source) { var property = new PropertyDescriptor(sourceProperty.Value, true); for (index = 0; index < count; index++) property.AddBehavior(behaviors[index]); properties[sourceProperty.Key] = property; } return properties; }