Sample usage:
var ifaces = (typeof(IYourInterface)).GetInterfaceImplementors();
public static class TypeExtensions
{
public static IEnumerable<Type> GetInterfaceImplementors(this Type itype)
{
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (Type type in assembly.GetTypes())
{
if (itype.IsAssignableFrom(type) && ! type.IsInterface)
{
yield return type;
}
}
}
}
}
Using Linq directly:
Type interfaceType = typeof(yourInterfaceName);
var implementors = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(typs => typs.GetTypes())
.Where(typ => interfaceType.IsAssignableFrom(typ) && ! typ.IsInterface);