Supongamos que tengo un método de fábrica, que quiere construir una instancia de un tipo elegido en tiempo de ejecución a través de la reflexión. Supongamos además que mi método de fábrica es un código genérico que no hace referencia directamente al ensamblaje que contiene el tipo especificado, aunque se ejecutará desde una aplicación que tenga referenciado el ensamblaje necesario.¿Cómo puedo obtener un tipo de un conjunto referenciado a través de la reflexión
¿Cómo hago para escribir un código que pueda encontrar este tipo? Si hago lo siguiente
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
esto parece fallar porque el tipo no está definido en el ensamblaje en ejecución. Si pudiera obtener todas las asambleas disponibles en tiempo de ejecución, podría iterar sobre ellas y encontrar cuál contiene el tipo que deseo. Pero no puedo ver una manera de hacer eso. AppDomain.CurrentDomain.GetAssemblies()
parece prometedor, pero no devuelve todos los ensamblajes a los que me he referido en mi proyecto.
Editar: Varias personas han señalado que necesito cargar el conjunto. El problema es que este fragmento de código no sabe qué ensamblaje debe cargar, ya que intento escribir este código de manera que no dependa de los otros ensamblajes.
Deliberadamente omití los detalles de typeName
, ya que el mapeo de una cadena a otra es realmente más complicado en mi código real. De hecho, el tipo se identifica mediante un atributo personalizado que contiene la cadena especificada, pero si puedo obtener una lista de tipos, no tengo problemas para restringir la lista al tipo deseado.
¿Cuál es el valor en typeName? ¿Es el nombre completo? –