Cargando un Assembly dinámicamente
Posted on : 28-09-2009 | By : Arturo Molina | In : .NET
Tags: Assembly, interface
0
Hace tiempo tuve la necesidad de cargar dinámicamente una DLL. Esto puede tener muchas aplicaciones como tener una entrada en un archivo de cofiguración para poder elegir entre usar una clase u otra. Dichas clases podría por ejemplo, implementar diferentes formas de hacer una tarea específica.
class Program
{
static void Main(string[] args)
{
string className = "Tester.SpanishGreeter";
Assembly assembly = Assembly.GetExecutingAssembly();
object o = assembly.CreateInstance(className);
IGreeter test = (IGreeter)o;
test.sayHello();
Console.ReadLine();
}
}
interface IGreeter
{
void sayHello();
}
class SpanishGreeter : IGreeter
{
public void sayHello()
{
Console.WriteLine("Hola");
}
}
class EnglishGreeter : IGreeter
{
public void sayHello()
{
Console.WriteLine("Hello");
}
}
class DanishGreeter : IGreeter
{
public void sayHello()
{
Console.WriteLine("Hej");
}
}
Fácilmente el nombre de la clase lo podríamos obtener de una entrada del usuario, archivo de configuración o base de datos. Después obtenemos el ensamblado que se está ejecutando actualmente, de ahí podemos crear una instancia de object llamando al método CreateInstance() y enviando el nombre de la clase (namespace incluído). De ahí todo lo que tenemos que hacer es castear el objecto a nuestra clase y ¡Listo! Podemos hacer uso de cualquiera de nuestras implementaciones de la interfaz IGreeter.






