Obtener todos los tipos que implementan una interfaz
Usando la reflexión, ¿cómo puedo obtener todos los tipos que implementan una interfaz con C# 3.0/.NET 3.5 con la menor cantidad de código y minimizando las iteraciones?
Esto es lo que quiero reescribir:
foreach (Type t in this.GetType().Assembly.GetTypes())
if (t is IMyInterface)
; //do stuff
Aceptado
El mío sería este en c# 3.0 :)
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
Básicamente, la menor cantidad de iteraciones siempre será:
loop assemblies
loop types
see if implemented.
Esto funcionó para mí. Recorre las clases y comprueba si se derivan de myInterface
foreach (Type mytype in System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(mytype => mytype .GetInterfaces().Contains(typeof(myInterface)))) {
//do stuff
}