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); } } } }
public static ChoValidationResults Validate(object target) { ChoValidationResults validationResults = new ChoValidationResults(); if (target != null) { DoValidate(target, validationResults); } return(validationResults); }
private static void DoValidate(object target, ChoValidationResults validationResults) { bool canContinue = true; foreach (MethodInfo methodInfo in GetValidationRoutines(target.GetType())) { canContinue = false; canContinue = (bool)ChoType.InvokeMethod(target, methodInfo.Name, validationResults); if (!canContinue) { break; } } //Do built-in attribute validations if (canContinue) { MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType()); foreach (MemberInfo memberInfo in memberInfos) { foreach (ChoMemberAttribute memberAttribute in ChoType.GetMemberAttributesByBaseType(memberInfo, typeof(ChoMemberAttribute))) { try { memberAttribute.Validate(ChoType.GetMemberValue(target, memberInfo.Name), false); } catch (Exception ex) { validationResults.AddResult(ex.Message); } } } } }