本文整理汇总了C#中Castle.Components.DictionaryAdapter.PropertyDescriptor.AddBehavior方法的典型用法代码示例。如果您正苦于以下问题:C# PropertyDescriptor.AddBehavior方法的具体用法?C# PropertyDescriptor.AddBehavior怎么用?C# PropertyDescriptor.AddBehavior使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Castle.Components.DictionaryAdapter.PropertyDescriptor
的用法示例。
在下文中一共展示了PropertyDescriptor.AddBehavior方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PropertyDescriptor
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;
}
示例2: GetPropertyValue
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;
}
示例3: MergeProperties
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;
}