using System; using System.Collections.Generic; using System.Linq; namespace System.Reflection { public static class AssemblyExtensions { public static IEnumerable GetInterfaces(this Assembly assembly) { if (assembly is null) { throw new ArgumentNullException(nameof(assembly)); } return assembly.GetTypes(typeof(TInterfaceType)); } public static IEnumerable GetTypes(this Assembly assembly, Type interfaceType) { if (assembly is null) { throw new ArgumentNullException(nameof(assembly)); } if (interfaceType is null) { throw new ArgumentNullException(nameof(interfaceType)); } return assembly.GetTypes() .Where(t => t.GetInterfaces().Contains(interfaceType)); } } }