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);
}
}
}