Exemplo n.º 1
0
        public static IEnumerable <Type> FindTypes(Type baseType, Assembly assembly, TypeDiscoveryFilters filters)
        {
            if (baseType == null)
            {
                throw new ArgumentNullException(nameof(baseType));
            }

            if (assembly == null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            foreach (Type type in assembly.GetTypes())
            {
                if ((filters & TypeDiscoveryFilters.NonPublic) == TypeDiscoveryFilters.NonPublic && type.IsPublic)
                {
                    continue;
                }

                if ((filters & TypeDiscoveryFilters.Abstract) == TypeDiscoveryFilters.Abstract && type.IsAbstract)
                {
                    continue;
                }

                if ((filters & TypeDiscoveryFilters.BaseType) == TypeDiscoveryFilters.BaseType && type != baseType)
                {
                    continue;
                }

                if ((filters & TypeDiscoveryFilters.DefaultConstructor) == TypeDiscoveryFilters.DefaultConstructor)
                {
                    if (type.GetConstructor(Type.EmptyTypes) == null)
                    {
                        continue;
                    }
                }

                if (type.IsSubclassOf(baseType))
                {
                    yield return(type);
                }
            }
        }
Exemplo n.º 2
0
 public static IEnumerable <Type> FindTypes(Type baseType, TypeDiscoveryFilters filters)
 {
     return(FindTypes(baseType, baseType.Assembly, filters));
 }