private static void DoObjectMemberValidation(object target) { if (target == null) { return; } if (target.GetType().IsPrimitive || target is string || target is Enum ) { } else { //Call the initialize to all members foreach (FieldInfo fieldInfo in ChoType.GetFields(target.GetType())) { if (fieldInfo.IsReadOnly()) { continue; } object fieldValue = ChoType.GetFieldValue(target, fieldInfo.Name); if (fieldValue == null) { continue; } if (!(fieldValue is string) && fieldValue is IEnumerable) { foreach (object fieldItemValue in (IEnumerable)fieldValue) { DoObjectMemberValidation(fieldItemValue); } } else { DoObjectMemberValidation(fieldValue); } } } if (target != null && !(target is ChoRealProxy)) { //Do Validate ChoDoObjectValidationAfterInitializationAttribute doObjectValidationAfterInitializationAttribute = ChoType.GetAttribute <ChoDoObjectValidationAfterInitializationAttribute>(target.GetType()); if (doObjectValidationAfterInitializationAttribute != null && doObjectValidationAfterInitializationAttribute.DoObjectValidation) { ChoValidationResults validationResults = ChoValidation.Validate(target); if (validationResults != null && validationResults.Count > 0) { throw new ChoValidationException("Failed to validate object.", validationResults); } } } }
private static bool DoObjectMemberInitialization(object target, bool beforeFieldInit, object state) { if (target.GetType().IsPrimitive || target is string || target is Enum ) { } else { //Call the initialize to all members foreach (FieldInfo fieldInfo in ChoType.GetFields(target.GetType())) { if (fieldInfo.IsReadOnly()) { continue; } object fieldValue = ChoType.GetFieldValue(target, fieldInfo.Name); if (fieldValue == null) { continue; } if (!(fieldValue is string) && fieldValue is IEnumerable) { foreach (object fieldItemValue in (IEnumerable)fieldValue) { DoInitialize(fieldItemValue, beforeFieldInit, state); } DoInitialize(fieldValue, beforeFieldInit, state); } else { DoInitialize(fieldValue, beforeFieldInit, state); } } } if (target is IChoObjectInitializable) { return(((IChoObjectInitializable)target).Initialize(beforeFieldInit, state)); } else { return(false); } }
private static void DoObjectMemberConversion(object ultimateParent, object target) { if (target == null) { return; } if (target.GetType().IsPrimitive || target is string || target is Enum ) { } else { DoPostObjectMemberConversion(ultimateParent, target); //Call the initialize to all members foreach (FieldInfo fieldInfo in ChoType.GetFields(target.GetType())) { if (fieldInfo.IsReadOnly()) { continue; } object fieldValue = ChoType.GetFieldValue(target, fieldInfo.Name); if (fieldValue == null) { continue; } if (!(fieldValue is string) && fieldValue is IEnumerable) { foreach (object fieldItemValue in (IEnumerable)fieldValue) { DoObjectMemberConversion(ultimateParent, fieldItemValue); } ChoType.SetFieldValue(target, fieldInfo.Name, fieldValue); } else { DoObjectMemberConversion(ultimateParent, fieldValue); } } } }
public static void Initialize(Type type) { ChoGuard.ArgumentNotNull(type, "Type"); if (IsInitialized(type)) { return; } DoPostTypeMemberConversion(type); foreach (FieldInfo fieldInfo in ChoType.GetFields(type)) { if (!fieldInfo.IsStatic) { continue; } object fieldValue = ChoType.GetStaticFieldValue(type, fieldInfo.Name); if (fieldValue == null) { continue; } if (!(fieldValue is string) && fieldValue is IEnumerable) { foreach (object fieldItemValue in (IEnumerable)fieldValue) { if (!(fieldItemValue is IChoObjectInitializable)) { break; } ChoObjectInitializer.Initialize(fieldItemValue); } } else if (fieldValue.GetType().IsPrimitive || fieldValue is string) { } else { ChoObjectInitializer.Initialize(fieldValue); } } }
private void LoadDefaults(Type declaringType) { ChoIniFile iniFile = GetIniSection(declaringType, "DEFAULT_VALUE"); var dict = new Dictionary <string, object>(); object defaultValue = null; string memberName = null; foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(declaringType).AsTypedEnumerable <PropertyDescriptor>().Where(pd => !pd.Attributes.OfType <ChoIgnoreMemberAttribute>().Any())) { try { memberName = pd.Name; if (_turnOnMetaDataCache) { defaultValue = iniFile.GetValue(pd.Name, ChoType.GetDefaultValue(pd), _isLockedCache[declaringType]); } else { defaultValue = ChoType.GetDefaultValue(pd); } if (defaultValue is string) { defaultValue = ((string)defaultValue).ExpandProperties(); } defaultValue = ChoConvert.ConvertFrom(defaultValue, pd.PropertyType); dict.Add(pd.Name, defaultValue); } catch (Exception ex) { ChoETLFramework.WriteLog(ChoETLFramework.Switch.TraceError, "Error while converting default value '{0}' to '{1}' member type. {2}".FormatString(defaultValue, ChoType.GetMemberName(pd), ex.Message)); } } foreach (FieldInfo memberInfo in ChoType.GetFields(declaringType)) { try { memberName = memberInfo.Name; if (_turnOnMetaDataCache) { defaultValue = iniFile.GetValue(memberInfo.Name, ChoType.GetDefaultValue(memberInfo), _isLockedCache[declaringType]); } else { defaultValue = ChoType.GetDefaultValue(memberInfo); } if (defaultValue is string) { defaultValue = ((string)defaultValue).ExpandProperties(); } defaultValue = ChoConvert.ConvertFrom(defaultValue, memberInfo.FieldType); dict.Add(memberInfo.Name, defaultValue); } catch (Exception ex) { ChoETLFramework.WriteLog(ChoETLFramework.Switch.TraceError, "Error while converting default value '{0}' to '{1}' member type. {2}".FormatString(defaultValue, ChoType.GetMemberName(memberInfo), ex.Message)); } } _defaultsCache.Add(declaringType, dict); }