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;
        }
示例#4
0
#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;
        }
示例#5
0
#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);
        }