コード例 #1
0
        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));
                }
            }
        }
コード例 #2
0
        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);
        }