private void GenerateRules(ValidationModel model, Type propertyType, string prefix = "") { var validatorsForProperty = ValidatorsResolver.GetAllForType(propertyType); if (!validatorsForProperty.Any()) { return; } foreach (var validatorForProperty in validatorsForProperty) { GenerateChildRules(model, validatorForProperty, prefix); } foreach (var nestedPropertyInfo in propertyType.GetProperties()) { if (nestedPropertyInfo.PropertyType.IsValueType) { GenerateValueTypesRules(model, nestedPropertyInfo, prefix); } else if (nestedPropertyInfo.PropertyType.IsGenericType) { var genericType = nestedPropertyInfo.PropertyType.GetGenericArguments().First(); GenerateRules(model, genericType, nestedPropertyInfo.Name.ToPrefix(prefix)); } else if (nestedPropertyInfo.PropertyType.IsClass) { GenerateRules(model, nestedPropertyInfo.PropertyType, nestedPropertyInfo.Name.ToPrefix(prefix)); } } }
public IDictionary <string, ValidationModel> Generate() { var toReturn = new Dictionary <string, ValidationModel>(); var modelValidators = ValidatorsResolver.GetAll(); foreach (var modelValidator in modelValidators) { var model = new ValidationModel(); var modelType = modelValidator.GetModelType(); var modelName = _propertyResolver.GetModelName(modelType); if (toReturn.ContainsKey(modelName)) { continue; } GenerateRules(model, modelType); toReturn.Add(modelName, model); } return(toReturn); }