Esempio n. 1
0
        public static Type[] GetTypesImplementing <T>(string assemblyName = "")
        {
            IEnumerable <Assembly> assemblies = null;

            if (assemblyName.IsNotEmpty() &&
                LoadedAssemblies.Count(a => assemblyName.IsNotEmpty() && a.GetName().Name == assemblyName) > 0)
            {
                assemblies = LoadedAssemblies.Where(a => a.FullName.StartsWith(assemblyName));
            }
            else if (assemblyName.IsEmpty())
            {
                assemblies = LoadedAssemblies;
            }
            else
            {
                throw new InvalidOperationException($"The assembly {assemblyName} is not loaded.");
            }

            IEnumerable <Type> types =
                from type in assemblies.SelectMany(a => a.GetTypes())
                where typeof(T).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract
                select type;

            return(types.ToArray());
        }
Esempio n. 2
0
        public static Type[] GetSubTypes <T>(string assemblyName = "")
        {
            IEnumerable <Assembly> assemblies = null;

            if (assemblyName.IsNotEmpty() &&
                LoadedAssemblies.Count(a => assemblyName.IsNotEmpty() && a.GetName().Name == assemblyName) > 0)
            {
                assemblies = LoadedAssemblies.Where(a => a.FullName.StartsWith(assemblyName));
            }
            else if (assemblyName.IsEmpty())
            {
                assemblies = LoadedAssemblies;
            }
            else
            {
                throw new InvalidOperationException($"The assembly {assemblyName} is not loaded.");
            }

            return(assemblies
                   .Select(a => a.GetTypes())
                   .SelectMany(t => t)
                   .Where(t => t.IsSubclassOf(typeof(T)) && !t.IsAbstract)?
                   .ToArray());
        }