コード例 #1
0
ファイル: Model.cs プロジェクト: JohannesMoersch/Valigator
        private static IEnumerable <PropertyInfo> GetBaseProperties(Type type)
        {
            var currentLevelProperties = ValigatorModelBaseHelpers
                                         .GetProperties(type, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                                         .Where(p => !IsExplicitInterfaceImplementation(p))
                                         .ToArray();

            foreach (var currentProperty in currentLevelProperties)
            {
                if (type.IsValigatorModelBase())
                {
                    yield return(currentProperty);
                }
                else
                {
                    var method = currentProperty.GetGetMethod(true) ?? currentProperty.GetSetMethod(true);

                    var baseType = method?.GetBaseDefinition().DeclaringType;
                    if (baseType != typeof(TModel))
                    {
                        yield return(ValigatorModelBaseHelpers.GetProperty(baseType, currentProperty.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance));
                    }
                    else
                    {
                        yield return(currentProperty);
                    }
                }
            }
        }
コード例 #2
0
        private static Dictionary <string, ValigatorJsonPropertyHandler <TObject> > CreatePropertyHandlers()
        {
            var result = new Dictionary <string, ValigatorJsonPropertyHandler <TObject> >();

            foreach (var property in ValigatorModelBaseHelpers.GetProperties(typeof(TObject), BindingFlags.Public | BindingFlags.Instance))
            {
                result.Add(property.Name, ValigatorJsonPropertyHandler <TObject> .Create(property));
            }

            return(result);
        }
コード例 #3
0
ファイル: Model.cs プロジェクト: JohannesMoersch/Valigator
        private static Func <TModel, PropertyDescriptor[]> CreatePropertyDescriptorsFunction()
        {
            var modelExpression = Expression.Parameter(typeof(TModel), "model");

            var propertyDescriptors = ValigatorModelBaseHelpers
                                      .GetProperties(typeof(TModel))
                                      .Where(property => property.PropertyType.IsConstructedGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Data <>))
                                      .Select(property => CreatePropertyDescriptor(modelExpression, property));

            var arrayInitializer = Expression.NewArrayInit(typeof(PropertyDescriptor), propertyDescriptors);

            return(Expression.Lambda <Func <TModel, PropertyDescriptor[]> >(arrayInitializer, modelExpression).Compile());
        }