private static void CollectProperties(Type currentType, Action <PropertyInfo, Type> onProperty)
        {
            var types = new List <Type>();

            types.Add(currentType);
            types.AddRange(currentType.GetInterfaces());
            const BindingFlags publicBindings = BindingFlags.Public | BindingFlags.Instance;

            foreach (var reflectedType in types.Where(t => InfrastructureTypes.Contains(t) == false))
            {
                foreach (var property in reflectedType.GetProperties(publicBindings))
                {
                    onProperty(property, reflectedType);
                }
            }
        }
        private static void CollectProperties(Type currentType, Action <PropertyInfo> onProperty)
        {
            var types = new List <Type>();

            types.Add(currentType);
            types.AddRange(currentType.GetInterfaces());
            var publicBindings = BindingFlags.Public | BindingFlags.Instance;

            foreach (Type type in types)
            {
                if (InfrastructureTypes.Contains(type) == false)
                {
                    foreach (var property in type.GetProperties(publicBindings))
                    {
                        onProperty(property);
                    }
                }
            }
        }