private void GetValue(IValidator inputValidator, ValidationMetaData metaData, string parentKey) { var descriptor = inputValidator.CreateDescriptor(); var members = descriptor.GetMembersWithValidators(); foreach (var member in members) { var rules = descriptor.GetRulesForMember(member.Key); foreach (var rule in rules) { foreach (var validator in rule.Validators) { var currentKey = string.IsNullOrEmpty(parentKey) ? member.Key : string.Format("{0}.{1}", parentKey, member.Key.ToCamelCase()); if (validator is ChildValidatorAdaptor) { var childValidator = (validator as ChildValidatorAdaptor).Validator; GetValue(childValidator, metaData, currentKey); } else if(validator is IPropertyValidator) GenerateFor(metaData, currentKey, validator as IPropertyValidator); } } } }
#pragma warning disable 1591 // Xml Comments public ValidationMetaData GenerateFrom(IValidator inputValidator) { var metaData = new ValidationMetaData(); GetValue(inputValidator, metaData, String.Empty); return metaData; }
void GetValue(IValidator inputValidator, ValidationMetaData metaData, string parentKey, bool isParentConcept = false, bool isParentModelRule = false) { var inputValidatorType = inputValidator.GetType(); #if(NETFX_CORE) var genericArguments = inputValidatorType.GetTypeInfo().BaseType.GenericTypeArguments; #else var genericArguments = inputValidatorType.BaseType.GetGenericArguments(); #endif var descriptor = inputValidator.CreateDescriptor(); var members = descriptor.GetMembersWithValidators(); foreach (var member in members) { var rules = descriptor.GetRulesForMember(member.Key); foreach (var rule in rules) { foreach (var validator in rule.Validators) { var isModelRule = member.Key == ModelRule<string>.ModelRulePropertyName; var currentKey = string.Empty; if (isParentConcept || isParentModelRule || isModelRule) currentKey = parentKey; else currentKey = string.IsNullOrEmpty(parentKey) ? member.Key : string.Format("{0}.{1}", parentKey, member.Key.ToCamelCase()); if (validator is ChildValidatorAdaptor) { var isConcept = false; if (genericArguments.Length == 1) { var type = isModelRule ? genericArguments[0] : GetPropertyInfo(genericArguments[0], member.Key).PropertyType; isConcept = type.IsConcept(); } var childValidator = (validator as ChildValidatorAdaptor).Validator; GetValue(childValidator, metaData, currentKey, isConcept, isModelRule); } else if (validator is IPropertyValidator) { GenerateFor(metaData, currentKey, validator as IPropertyValidator); } } } } }
#pragma warning restore 1591 // Xml Comments void GenerateFor(ValidationMetaData metaData, string property, IPropertyValidator validator) { var validatorType = validator.GetType(); var types = new List<Type>(); types.Add(validatorType); types.AddRange(validatorType.GetInterfaces()); foreach (var type in types) { if (_generatorsByType.ContainsKey(type)) { var rule = _generatorsByType[type].GeneratorFrom(validator); var ruleName = rule.GetType().Name.ToCamelCase(); var propertyName = property.ToCamelCase(); metaData[propertyName][ruleName] = rule; } } }
#pragma warning disable 1591 // Xml Comments public ValidationMetaData GenerateFrom(IValidator inputValidator) { var metaData = new ValidationMetaData(); var descriptor = inputValidator.CreateDescriptor(); var members = descriptor.GetMembersWithValidators(); foreach (var member in members) { var rules = descriptor.GetRulesForMember(member.Key); foreach (var rule in rules) { foreach (var validator in rule.Validators) { if (validator is IPropertyValidator) GenerateFor(metaData, member.Key, validator as IPropertyValidator); } } } return metaData; }