Example #1
0
        private SifterMap resolveIndexedTypes()
        {
            var map = new SifterMap();

            foreach (var(type, sifterPropertyInfoMap) in sifterMap)
            {
                var children = indexedTypes.Where(i => i.IsSubclassOf(type));

                foreach (var childType in children)
                {
                    if (map.TryAdd(childType, sifterPropertyInfoMap))
                    {
                        continue;
                    }

                    map[childType].MergeWith(sifterPropertyInfoMap);
                }

                if (!map.TryAdd(type, sifterPropertyInfoMap))
                {
                    map[type].MergeWith(sifterPropertyInfoMap);
                }
            }

            return(map);
        }
Example #2
0
        private static TypeTree typeTree(SifterMap map)
        {
            var typeTree = new TypeTree();

            foreach (var(type, _) in map)
            {
                const BindingFlags bindingFlags =
                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy;
                var properties = type.GetProperties(bindingFlags);

                foreach (var property in properties)
                {
                    var propertyType = property.PropertyType;

                    if (map.Keys.Contains(propertyType))
                    {
                        typeTree.Add((type, property.Name), propertyType);
                    }
                }
            }

            return(typeTree);
        }