Este é um problema comum e provavelmente muitos programadores já passaram por isso, principalmente em aplicações GUI.
A ideia é simples, instanciar uma nova classe que é derivada de uma classe/interface para que possa percorrer automaticamente e adicionar, por exemplo, menus, filtros, permissões, módulos do sistema, entre outras possibilidades.
Aqui um método que cuida disso com interfaces e classes abstratas:

public static class ReflectionHelper {
    public static IEnumerable<T> GetEnumerableOfType<T>(params object[] constructorArgs) {
    return Assembly.GetAssembly(typeof(T)).GetTypes()
        .Where(t => t.IsClass && !t.IsAbstract && (typeof(T).IsAssignableFrom(t) || t.IsSubclassOf(typeof(T))))
        .Select(type => (T)Activator.CreateInstance(type, constructorArgs))
        .ToList();
    }
}

e um exemplo de uso:

var plugins = ReflectionHelper.GetEnumerableOfType<IPlugin>();

Espero que seja útil, por hoje é só pessoal.

Sobre Erick

Erick de Oliveira escreveu 19 artigos no blog.

Tagged with →  
Share →

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>