void GenerateForValidator(IValidator inputValidator, TypeMetaData metaData, string parentKey, bool isParentConcept = false, bool isParentModelRule = false) { var inputValidatorType = inputValidator.GetType(); var genericArguments = inputValidatorType.BaseType.GetGenericArguments(); 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 = GetKeyForMember(parentKey, isParentConcept, isParentModelRule, member, isModelRule); if (validator is ChildValidatorAdaptor) { GenerateForChildValidator(metaData, genericArguments, member, validator, isModelRule, currentKey); } else if (validator is IPropertyValidator) { GenerateFor(metaData, currentKey, validator); } } } } }
#pragma warning disable 1591 // Xml Comments public TypeMetaData GenerateFor(Type typeForValidation) { var metaData = new TypeMetaData(); var validator = _validatorProvider.GetInputValidatorFor(typeForValidation); GenerateForValidator(validator, metaData, string.Empty); return metaData; }
#pragma warning disable 1591 // Xml Comments public TypeMetaData GenerateFor(Type typeForValidation) { var metaData = new TypeMetaData(); if (_inputValidatorsByType.ContainsKey(typeForValidation)) { foreach (var inputValidatorType in _inputValidatorsByType[typeForValidation]) { var validator = _container.Get(inputValidatorType) as IValidator; GenerateForValidator(validator, metaData, string.Empty); } } return metaData; }
#pragma warning disable 1591 // Xml Comments public TypeMetaData GetMetaDataFor(Type typeForValidation) { var typeMetaData = new TypeMetaData(); foreach (var generator in _generators) { var metaData = generator.GenerateFor(typeForValidation); foreach (var property in metaData.Properties.Keys) { foreach( var ruleSet in metaData.Properties[property].Keys ) { typeMetaData[property][ruleSet] = metaData.Properties[property][ruleSet]; } } } return typeMetaData; }
#pragma warning disable 1591 // Xml Comments public TypeMetaData GetMetaDataFor(Type typeForValidation) { var typeMetaData = new TypeMetaData(); foreach (var generator in _generators) { var metaData = generator.GenerateFor(typeForValidation); foreach (var property in metaData.Properties.Keys) { foreach (var ruleSet in metaData.Properties[property].Keys) { typeMetaData[property][ruleSet] = metaData.Properties[property][ruleSet]; } } } return(typeMetaData); }
void GenerateForValidator( IValidator inputValidator, TypeMetaData metaData, string parentKey, bool shouldUseParentKey = false) { var inputValidatorType = inputValidator.GetType(); var genericArguments = inputValidatorType.BaseType.GetGenericArguments(); var descriptor = inputValidator.CreateDescriptor(); var members = descriptor.GetMembersWithValidators(); foreach (var member in members) { var isModelRule = member.Key == ModelRule<string>.ModelRulePropertyName || member.Key == string.Empty; var currentKey = (shouldUseParentKey || isModelRule) ? parentKey : GetKeyForMember(parentKey, member); var isConcept = new Lazy<bool>(() => IsConcept(genericArguments, isModelRule, member)); foreach (var rule in descriptor.GetRulesForMember(member.Key)) { foreach (var validator in rule.Validators) { var childValidatorAdaptor = validator as ChildValidatorAdaptor; if (childValidatorAdaptor != null) { var childValidator = childValidatorAdaptor.GetValidator(NullContext); GenerateForValidator(childValidator, metaData, currentKey, isModelRule || isConcept.Value); } else { GenerateFor(metaData, currentKey, validator); } } } } }
void GenerateFor(TypeMetaData 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 propertyName = property.ToCamelCase(); var rule = _generatorsByType[type].GeneratorFrom(property, validator); var ruleName = rule.GetType().Name.ToCamelCase(); metaData[propertyName][ruleName] = rule; } } }
void GenerateForChildValidator(TypeMetaData metaData, Type[] genericArguments, IGrouping<string, IPropertyValidator> member, IPropertyValidator validator, bool isModelRule, string currentKey) { 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; GenerateForValidator(childValidator, metaData, currentKey, isConcept, isModelRule); }