internal FunctionalProperty(string name, Type propertyType, Type ownerType, FunctionalPropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback) { Name = name; PropertyType = propertyType; OwnerType = ownerType; DefaultMetadata = typeMetadata; ValidateValueCallback = validateValueCallback; }
public static FunctionalProperty Register(string name, Type propertyType, Type ownerType, FunctionalPropertyMetadata typeMetadata) { return Register(name, propertyType, ownerType, typeMetadata, null); }
public static FunctionalProperty Register(string name, Type propertyType, Type ownerType, FunctionalPropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback) { return FunctionalPropertyManager.Instance.Register(name, propertyType, ownerType, typeMetadata, validateValueCallback); }
internal FunctionalProperty Register(string name, Type propertyType, Type ownerType, FunctionalPropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback) { if (String.IsNullOrEmpty(name)) throw new ArgumentNullException("name", "name is null."); if (propertyType == null) throw new ArgumentNullException("propertyType", "propertyType is null."); if (ownerType == null) throw new ArgumentNullException("ownerType", "ownerType is null."); if (FunctionalPropertiesInternal.ContainsKey(ownerType)) { if (FunctionalPropertiesInternal[ownerType].Any(cur => cur.Name == name)) throw new ArgumentException(String.Format("FunctionalProperty Name '{0}' for OwnerType '{1}' already used.", name, ownerType)); } if (typeMetadata != null) { if (typeMetadata.DefaultValue != null && propertyType.IsAssignableFrom(typeMetadata.DefaultValue.GetType()) == false) throw new ArgumentException(String.Format("Default value type does not match type of property '{0}'.", name)); if (typeMetadata.DefaultValue == null && propertyType.IsValueType) typeMetadata.DefaultValue = Activator.CreateInstance(propertyType); if (validateValueCallback != null && validateValueCallback(typeMetadata.DefaultValue) == false) throw new ArgumentException(String.Format("Default value for '{0}' property is not valid because ValidateValueCallback failed.", name)); } FunctionalPropertyMetadata actualMetadata = typeMetadata ?? new FunctionalPropertyMetadata(propertyType.IsValueType ? Activator.CreateInstance(propertyType) : null); FunctionalProperty functionalProperty = new FunctionalProperty(name, propertyType, ownerType, actualMetadata, validateValueCallback); if (!FunctionalPropertiesInternal.ContainsKey(ownerType)) FunctionalPropertiesInternal[ownerType] = new List<FunctionalProperty>(); FunctionalPropertiesInternal[ownerType].Add(functionalProperty); return functionalProperty; }