internal void CallAfterConfigurationMemberPersist() { //if (!(ConfigObject is ChoConfigurableObject)) // return; if (AfterConfigurationObjectMemberPersist != null) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(GetType()); if (memberInfos == null || memberInfos.Length == 0) { return; } ChoPropertyInfoAttribute memberInfoAttribute = null; string name = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } object memberValue = ChoType.GetMemberValue(this, memberInfo.Name); memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); name = ChoType.GetMemberName(memberInfo, memberInfoAttribute); RaiseAfterConfigurationObjectMemberPersist(memberInfo.Name, name, memberValue); } } }
private void CallNotifyPropertyChangedForAllDefaultableMembers() { if (!(ConfigObject is ChoConfigurableObject)) { return; } MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); if (memberInfoAttribute == null || !memberInfoAttribute.IsDefaultValueSpecified) { continue; } ((ChoConfigurableObject)ConfigObject).OnPropertyChanged(memberInfo.Name); } } }
protected override void PostInvoke(ChoMemberInfo memberInfo) { object newValue = memberInfo.Value; if (memberInfo.DirtyOperation) { string propertyName = ChoType.GetMemberName(memberInfo.Info); if (memberInfo.Exception == null) { RaiseAfterConfigurationObjectMemberLoaded(memberInfo.Name, propertyName, newValue); } else { if (!RaiseConfigurationObjectMemberLoadError(memberInfo.Name, propertyName, newValue, memberInfo.Exception)) { throw new ChoConfigurationObjectPostInvokeException("Error while loading configuration member load operation.", memberInfo.Exception); } else { memberInfo.ReturnMessage = new ReturnMessage(null, memberInfo.MethodCallMsg); } } } if (memberInfo.DirtyOperation && Dirty && !IsReadOnly() && Initialized) { ChoPropertyInfoAttribute memberInfoAttribute = ChoType.GetMemberAttribute(memberInfo.Info, typeof(ChoPropertyInfoAttribute)) as ChoPropertyInfoAttribute; if (memberInfoAttribute == null || memberInfoAttribute.Persistable) { Persist(); } SetDirty(false); } }
private void WireNotifyPropertyChangedMembersForChanges(Type type) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(type); if (memberInfos != null && memberInfos.Length > 0) { //Set member values INotifyPropertyChanged memberValue = null; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); memberValue = ChoType.GetMemberValue(this, memberInfo.Name) as INotifyPropertyChanged; if (memberValue == null) { continue; } memberValue.PropertyChanged += MemberValuePropertyChanged; WireNotifyPropertyChangedMembersForChanges(memberValue.GetType()); } } }
internal static bool TryConfigDefaultValue(ChoBaseConfigurationElement configElement, string propName, ChoPropertyInfoAttribute memberInfoAttribute, out object configDefaultValue) { configDefaultValue = null; ChoGuard.ArgumentNotNull(configElement, "ConfigElement"); ChoGuard.ArgumentNotNull(propName, "PropertyName"); ChoPropertyInfos propertyInfo = GetPropertyInfos(configElement); if (propertyInfo != null) { ChoPropertyInfo propInfo = propertyInfo[propName]; if (propInfo == null) { return(false); } configDefaultValue = propInfo != null ? propInfo.DefaultValue : null; return(propInfo != null ? propInfo.IsDefaultValueSpecified : false); } else if (memberInfoAttribute != null && memberInfoAttribute.IsDefaultValueSpecified) { configDefaultValue = memberInfoAttribute.DefaultValue; return(memberInfoAttribute.IsDefaultValueSpecified); } return(false); }
internal static bool TryGetFallbackValue(ChoBaseConfigurationElement configElement, string propName, ChoPropertyInfoAttribute memberInfoAttribute, out string configFallbackValue) { configFallbackValue = null; ChoGuard.ArgumentNotNull(configElement, "ConfigElement"); ChoGuard.ArgumentNotNull(propName, "PropertyName"); ChoPropertyInfos propertyInfo = GetPropertyInfos(configElement); if (propertyInfo != null) { ChoPropertyInfoMetaData propInfo = propertyInfo[propName]; if (propInfo == null) { if (memberInfoAttribute != null && memberInfoAttribute.IsFallbackValueSpecified) { configFallbackValue = memberInfoAttribute.FallbackValue; return(memberInfoAttribute.IsFallbackValueSpecified); } } configFallbackValue = propInfo != null && propInfo.FallbackValue != null ? propInfo.FallbackValue.Value : null; return(propInfo != null ? propInfo.IsFallbackValueSpecified : false); } else if (memberInfoAttribute != null && memberInfoAttribute.IsFallbackValueSpecified) { configFallbackValue = memberInfoAttribute.FallbackValue; return(memberInfoAttribute.IsFallbackValueSpecified); } return(false); }
private bool AssignToFallbackOrDefaultValues(ref bool isDirty) { bool isModfied = false; object defaultValue = null; object fallbackValue = null; MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } name = ChoType.GetMemberName(memberInfo); memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); //if (memberInfoAttribute == null) continue; defaultValue = null; fallbackValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out defaultValue); ChoConfigurationMetaDataManager.TryConfigFallbackValue(this, name, memberInfoAttribute, out fallbackValue); if (fallbackValue == null) { if (!isDefaultValueSpecified) { continue; } } bool hasError = !ChoConfigurationObjectErrorManagerService.GetObjectMemberError(ConfigObject, memberInfo.Name).IsNullOrEmpty(); if (hasError) { isModfied = true; if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } } } } return(isModfied); }
private void Reset() { if (ConfigObject == null) { return; } ChoConfigurationObjectErrorManagerService.ResetObjectErrors(ConfigObject); //MemberInfo[] memberInfos = ChoType.GetMembers(ConfigObject.GetType(), typeof(ChoConfigurationPropertyAttribute)); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); string name = ChoType.GetMemberName(memberInfo); object defaultValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out defaultValue); if (memberInfoAttribute == null || !isDefaultValueSpecified) { continue; } try { //object newConvertedValue = memberInfoAttribute.DefaultValue; object newConvertedValue = ChoConvert.ConvertFrom(ConfigObject, defaultValue, ChoType.GetMemberType(memberInfo), ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); SetConfigPropertyValue(newConvertedValue, memberInfo); //ChoType.SetMemberValue(ConfigObject, memberInfo, newConvertedValue); } catch (Exception innerEx) { ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format("Failed to assign `{0}` default value. {1}", ChoString.ToString(defaultValue), innerEx.Message)); } } } }
public IEnumerable <KeyValuePair <string, object> > AsDictionary() { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); name = ChoType.GetMemberName(memberInfo); yield return(new KeyValuePair <string, object>(name, ChoType.GetMemberValue(GetType(), memberInfo))); } } }
internal static Type GetSourceType(ChoBaseConfigurationElement configElement, string propName, ChoPropertyInfoAttribute memberInfoAttribute) { ChoGuard.ArgumentNotNull(configElement, "ConfigElement"); ChoGuard.ArgumentNotNull(propName, "PropertyName"); ChoPropertyInfos propertyInfo = GetPropertyInfos(configElement); if (propertyInfo != null) { ChoPropertyInfo propInfo = propertyInfo[propName]; if (propInfo != null && propInfo.SourceType != null) { return(propInfo.SourceType); } } if (memberInfoAttribute != null && memberInfoAttribute.SourceType != null) { return(memberInfoAttribute.SourceType); } return(null); }
protected override void PostInvoke(ChoMemberInfo memberInfo) { object newValue = memberInfo.Value; if (memberInfo.DirtyOperation) { string propertyName = ChoType.GetMemberName(memberInfo.Info); if (memberInfo.Exception == null) { RaiseAfterConfigurationObjectMemberSet(memberInfo.Name, propertyName, newValue); OnPropertyChanged(memberInfo.Name); } else { if (!RaiseConfigurationObjectMemberSetError(memberInfo.Name, propertyName, newValue, memberInfo.Exception)) { memberInfo.Exception = new ChoConfigurationObjectPostInvokeException("Error while setting '{0}' configuration member value.".FormatString(memberInfo.Name), memberInfo.Exception); } else { memberInfo.Exception = null; } } } if (memberInfo.DirtyOperation /*&& Dirty */ && !IsReadOnly() && Initialized) { ChoPropertyInfoAttribute memberInfoAttribute = ChoType.GetMemberAttribute(memberInfo.Info, typeof(ChoPropertyInfoAttribute)) as ChoPropertyInfoAttribute; if (memberInfoAttribute == null || memberInfoAttribute.Persistable) { Persist(); } SetDirty(false); } }
internal static bool IsExpressionProperty(ChoBaseConfigurationElement configElement, string propName, ChoPropertyInfoAttribute memberInfoAttribute) { ChoGuard.ArgumentNotNull(configElement, "ConfigElement"); ChoGuard.ArgumentNotNull(propName, "PropertyName"); ChoPropertyInfos propertyInfo = GetPropertyInfos(configElement); if (propertyInfo != null) { ChoPropertyInfoMetaData propInfo = propertyInfo[propName]; if (propInfo != null) { return(propInfo.IsExpression); } } if (memberInfoAttribute != null) { return(memberInfoAttribute.IsExpression); } return(false); }
private bool ExtractNPopulateValues(ref bool hasErrors, ref bool isDirty) { bool isModfied = false; object oldValue = null; object newValue = null; object origValue = null; object defaultValue = null; object fallbackValue = null; bool isConfigmemberDefined = false; //MemberInfo[] memberInfos = ChoType.GetMembers(ConfigObject.GetType(), typeof(ChoConfigurationPropertyAttribute)); MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(ConfigObject.GetType()); if (memberInfos != null && memberInfos.Length > 0) { //Set member values string name; ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); //if (memberInfoAttribute == null) continue; oldValue = null; newValue = null; origValue = null; defaultValue = null; fallbackValue = null; name = ChoType.GetMemberName(memberInfo); isConfigmemberDefined = ConfigSection.HasConfigMemberDefined(name); oldValue = ChoType.GetMemberValue(ConfigObject, memberInfo.Name); object configFallbackValue = null; object configDefaultValue = null; bool isDefaultValueSpecified = ChoConfigurationMetaDataManager.TryConfigDefaultValue(this, name, memberInfoAttribute, out configDefaultValue); ChoConfigurationMetaDataManager.TryConfigFallbackValue(this, name, memberInfoAttribute, out configFallbackValue); if (configFallbackValue == null) { if (isDefaultValueSpecified) { defaultValue = origValue = newValue = configDefaultValue; } } else { fallbackValue = origValue = newValue = configFallbackValue; } if (!isConfigmemberDefined) { if (!isDirty) { isDirty = memberInfoAttribute != null && memberInfoAttribute.Persistable ? true : false; } } else { origValue = newValue = ConfigSection[name]; } try { object newConvertedValue = ChoConvert.ConvertFrom(ConfigObject, newValue, ChoType.GetMemberType(memberInfo), ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)); newValue = newConvertedValue; } catch { } ChoConfigurableObject configObject = ConfigObject as ChoConfigurableObject; if (configObject != null) { if (!configObject.IsMemeberValueEqualInternal(memberInfo, oldValue, newValue)) { if (!configObject.RaiseBeforeConfigurationObjectMemberLoaded(memberInfo.Name, name, origValue, ref newValue)) { try { //ChoType.SetMemberValue(ConfigObject, memberInfo.Name, newValue != null ? ChoConvert.ConvertFrom(ConfigObject, newValue, // ChoType.GetMemberType(memberInfo), ChoTypeConvertersCache.GetTypeConverters(memberInfo)) : null); SetConfigPropertyValue(newValue, memberInfo); if (!_firstTime) { isModfied = true; } configObject.RaiseAfterConfigurationObjectMemberLoaded(memberInfo.Name, name, newValue); ChoConfigurationObjectErrorManagerService.ResetObjectMemberError(ConfigObject, memberInfo.Name); } catch (Exception innerEx) { if (!configObject.RaiseConfigurationObjectMemberLoadError(memberInfo.Name, name, origValue, innerEx)) { if (Silent) { if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format(Resources.ConfigConstructMsg, ChoString.ToString(origValue), innerEx.Message)); } else { throw new ChoConfigurationConstructionException(String.Format(Resources.ConfigConstructExceptionMsg, ChoString.ToString(origValue), ConfigObject.GetType().FullName, memberInfo.Name), innerEx); } } } } } } else { try { //ChoType.SetMemberValue(ConfigObject, memberInfo.Name, newValue != null ? ChoConvert.ConvertFrom(ConfigObject, newValue, // ChoType.GetMemberType(memberInfo), ChoTypeConvertersCache.GetTypeConverters(memberInfo)) : null); SetConfigPropertyValue(newValue, memberInfo); if (!_firstTime) { isModfied = true; } ChoConfigurationObjectErrorManagerService.ResetObjectMemberError(ConfigObject, memberInfo.Name); } catch (Exception innerEx) { if (Silent) { if (_firstTime) { AssignToFallbackOrDefaultValue(defaultValue, fallbackValue, memberInfo); } ChoConfigurationObjectErrorManagerService.SetObjectMemberError(ConfigObject, memberInfo.Name, String.Format(Resources.ConfigConstructMsg, ChoString.ToString(origValue), innerEx.Message)); } else { throw new ChoConfigurationConstructionException(String.Format(Resources.ConfigConstructExceptionMsg, ChoString.ToString(origValue), ConfigObject.GetType().FullName, memberInfo.Name), innerEx); } } } } } return(isModfied); }
private static ChoPropertyInfos ConstructPropertyInfos(ChoBaseConfigurationElement configElement) { if (configElement != null && configElement.ConfigbObjectType != null) { Dictionary <string, ChoPropertyInfos> propDict = _propDict; string configElementPath = configElement.ConfigElementPath; if (configElementPath.IsNullOrWhiteSpace()) { return(ChoPropertyInfos.Default); } if (!propDict.ContainsKey(configElementPath)) { lock (_padLock) { if (!propDict.ContainsKey(configElementPath)) { MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(configElement.ConfigbObjectType); if (memberInfos != null && memberInfos.Length > 0) { //Set member values List <ChoPropertyInfo> propertyInfoList = new List <ChoPropertyInfo>(); ChoPropertyInfoAttribute memberInfoAttribute = null; foreach (MemberInfo memberInfo in memberInfos) { if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null) { continue; } memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute)); ChoPropertyInfo propInfo = new ChoPropertyInfo(); propInfo.Name = ChoType.GetMemberName(memberInfo); if (memberInfoAttribute != null) { propInfo.DefaultValue = memberInfoAttribute.DefaultValue; propInfo.FallbackValue = memberInfoAttribute.FallbackValue; propInfo.SourceType = memberInfoAttribute.SourceType; propInfo.IsDefaultValueSpecified = memberInfoAttribute.IsDefaultValueSpecified; propInfo.IsFallbackValueSpecified = memberInfoAttribute.IsFallbackValueSpecified; } propertyInfoList.Add(propInfo); } if (propertyInfoList.Count > 0) { ChoPropertyInfos propertyInfos = new ChoPropertyInfos(); propertyInfos.PropertyInfoArr = propertyInfoList.ToArray(); return(propertyInfos); } } } } } } return(ChoPropertyInfos.Default); }