AddBehavior() public method

Adds the behaviors.
public AddBehavior ( ) : PropertyDescriptor
return PropertyDescriptor
Esempio n. 1
0
 private static void AddDefaultGetter(PropertyDescriptor descriptor)
 {
     if (descriptor.TypeConverter != null)
     {
         descriptor.AddBehavior(new DefaultPropertyGetter(descriptor.TypeConverter));
     }
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
		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;
		}
Esempio n. 7
0
		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;
		}