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.
 

Leer las respuestas

#1 Ignacio Nicolás Rodríguez
16/09/2003 - 14:31 | Informe spam
Antes que nada, Enrique, deberías hacer de a una pregunta por vez. Esto
ayuda no sólo a quien te responde sino también a quien pueda leer las
preguntas y respuestas a posteriori.


En tu problema con obtener tipos a partir del nombre de la clase, además de
que tienes que utilizar el nombre completo de las clases (con la lista de
namespace que corresponda), si la clase se encuentra en otro assembly, debes
obtener una referencia a él (por ejemplo a través de
Assembly.GetCallingAssembly) y después llamar a GetType pero la versión que
es un método de Assembly.

Assembly a = Assembly.GetCallingAssembly();
System.Type t = a.GetType("Nspacegral.Clase");


En cuanto al catálogo, lo que estás intentando implementar es un patrón que
se llama "singleton", donde cualquier parte de un programa accede a una
única instancia de una clase, y por eso se convierte en un buen lugar para
compartir información.
Pero tú quieres implementar un singleton para compartir entre varios
dominios de aplicación. Esto significa Remoting.
Efectivamente, la solución es sencilla, se trata de crear con remoting un
servicio y registrarlo como Singleton.
Puedes partir de la documentación en
http://msdn.microsoft.com/library/e...frame=true .
Saludos.




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 similares