Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        public static ChoValidationResults Validate(object target)
        {
            ChoValidationResults validationResults = new ChoValidationResults();

            if (target != null)
            {
                DoValidate(target, validationResults);
            }

            return(validationResults);
        }
Пример #3
0
        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);
                        }
                    }
                }
            }
        }