Dudas sobre System.Type en C# NET

16/09/2003 - 13:47 por enrique | Informe spam
Tengo un problema al crear una DLL utilizando reflexión
de .NET:

Tengo este código en una clase A de un proyecto Visual
Studio.

ClaseA
...
string cadenaTipoMiClase = "MiClaseB"
System.Type tipoMiClase = Type.GetType
(cadenaTipoMiClase);



ClaseA y ClaseB están en el mismo proyecto de Visual
Studio, y ese código funciona bien.


Ahora bien, si creo una Librería DLL cque contiene la
claseA, el código

...
string cadenaTipoMiClase = "MiClaseB"
System.Type tipoMiClase = Type.GetType
(cadenaTipoMiClase);


no funciona !!!!!!

En cambio si la clase A y la clase B están en la misma
DLL sí, repito síiiiiiii, funciona.


Cómo se puede hacer que ese código funcione estando
claseA en una DLL y claseB en mi proyecto de Visual
Studio,
el cual añade una referencia a esa DLL.


Otra cosa importante:

Por ejemplo, quisiera tener una clase que gestionase
Catálogos de Datos para la aplicación.
Es decir, una especie de HashTable con catálogos (de
datos cuyo indide de actualización es bajo, por ejemplo,
provincias
de España).

Como quiero que la clase sea utilizada tanto para Web
como para Cliente-Servidor, no sé cuál sería la mejor
forma de almacenar dichos catálogos. (En el Application
seria buena no?, pero solo existe para Web).

Quizá una clase con un atributo static que tuviera todos
los catálogos sería eficiente y util ??

Es decir, tendría una clase con un atributo static de
tipo HashTable, que va a contener todos los catálogos, es
decir,
al ser estático estaría disponible para toda la
aplicación tanto web como cliente-servidor, no?.


Lo que me pregunto es si para Web sería eficiente en
cuanto a rendimiento. O si hay alguna otra opción mejor
que la que os planteo.


Muchísimas gracias.

Preguntas similare

Leer las respuestas

#6 Leonardo Diez
16/09/2003 - 19:04 | Informe spam
Joo, pense que solo con el nombre del ensamblado alcanzaba. En algún sentido
tiene lógica. Bueno, muchas gracias por la aclaración!

saludos,
Leonardo Diez
MCSD -
Equipo Técnico Grupo Danysoft

"Tristan" escribió en el mensaje
news:
Si, el problema es que en realidad como decía, el nombre cualificado de la
clase incluye "entre otras cosas", el nombre del ensamblado, pero también
cosas como la versión, etc... gracias a eso, pueden convivir distintas
versiones de la misma clase (la solución al famoso dll hell).

El nombre completamente cualificado de la clase se obtiene así:

string nombreClase = typeof(Form).AssemblyQualifiedName;


Aunque para ese caso, me parece más fácil hacer uso de
Assembly.CreateInstance()

Assembly ensamblado = typeof(Button).Assembly; // Cualquier objeto


conocido
del ensamblado
object obj = ensamblado.CreateInstance("System.Windows.Forms.Form");
Type tipo = obj.GetType();
tipo.GetMethod("Show").Invoke(obj, null);

Juan Carlos Badiola
MVP - C#


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida