Tengo un conjunto de clases, cada una es una strategy diferente para hacer el mismo trabajo.¿Crees un objeto sabiendo solo el nombre de la clase?
namespace BigCorp.SuperApp
{
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
}
La elección de qué estrategia usar es configurable. Quiero configurar solo el nombre de clase 'ClassB' en lugar del nombre de tipo completo 'BigCorp.SuperApp.ClassB' en el archivo app.config.
<appConfig>
<SuperAppConfig>
<Handler name="ClassB" />
</SuperAppConfig>
</appConfig>
Sin embargo, las llamadas de reflexión fallan debido a que esperan que el nombre de tipo completo, sobre todo
Type t = Type.GetType("ClassB"); // results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; // fails
¿Cómo puedo conseguir que esto funcione mientras se configura sólo el nombre de la clase? Concatenar el espacio de nombre para el nombre de clase para el nombre de tipo completo? ¿Hay alguna otra llamada de reflexión que funcione?
Si cree que esto es inútil y debería esperar que la configuración contenga el nombre completo, ¡estoy abierto a esa solución! Solo proporcione la razón para convencerme.
(no voy a carga un tipo de fuera de este montaje/espacio de nombres)
¡Podría usar un contenedor IoC, tratar nombres largos y obtener la creación de objetos para mí! –