private static IEnumerable<Type> GetImplementationsOfInterface(Assembly assembly, Type interfaceType) { return assembly.GetTypesSafe().Where(t => !t.IsInterface && !t.IsAbstract && interfaceType.IsAssignableFrom(t) && t.GetConstructors(BindingFlags.Public | BindingFlags.Instance) .Any(type => type.GetParameters().Select(p => p.ParameterType).All(p => (p.IsInterface || p.IsClass) && p != typeof(string)))); }
private static IEnumerable<Type> GetInterfaces(Assembly assembly) { return assembly.GetTypesSafe().Where(t => t.IsInterface); }