public static void Validate()

in Darabonba/ModelExtensions.cs [88:149]


        public static void Validate(this Model model)
        {
            if (model == null)
            {
                throw new ArgumentException("instance is not allowed as null.");
            }
            Type type = model.GetType();
            PropertyInfo[] properties = type.GetProperties();
            for (int i = 0; i < properties.Length; i++)
            {
                PropertyInfo p = properties[i];
                Type propertyType = p.PropertyType;
                object obj = p.GetValue(model);
                ValidationAttribute attribute = p.GetCustomAttribute(typeof(ValidationAttribute)) as ValidationAttribute;
                Validator validator = new Validator(attribute, p.Name);
                validator.ValidateRequired(obj);
                if (obj == null)
                {
                    continue;
                }
                if (typeof(IList).IsAssignableFrom(propertyType) && !typeof(Array).IsAssignableFrom(propertyType))
                {
                    IList list = (IList)obj;

                    //validate list count
                    validator.ValidateMaxLength(list);
                    validator.ValidateMinLength(list);

                    Type listType = propertyType.GetGenericArguments()[0];
                    if (typeof(Model).IsAssignableFrom(listType))
                    {
                        for (int j = 0; j < list.Count; j++)
                        {
                            ((Model)list[j]).Validate();
                        }
                    }
                    else
                    {
                        for (int j = 0; j < list.Count; j++)
                        {
                            //validate pattern
                            validator.ValidateRegex(list[j]);
                        }
                    }
                }
                else if (typeof(Model).IsAssignableFrom(propertyType))
                {
                    ((Model)obj).Validate();
                }
                else
                {
                    //validate pattern
                    validator.ValidateRegex(obj);
                    //validate count
                    validator.ValidateMaxLength(obj);
                    validator.ValidateMinLength(obj);
                    //validate num
                    validator.ValidateMaximum(obj);
                    validator.ValidateMinimum(obj);
                }
            }
        }