c# Variables Globales (AYUDA)

16/01/2008 - 06:59 por csharp1 | Informe spam
Que tal amigos,
Tengo una aplicacion c# desarrollada en visual studio 2005, la cual tiene
una clase Global.cs (dentro de app_code)que tiene muchas variables estaticas
para su uso general dentro de la aplicacion.

El problema es que se ignoraba que al hacer esto, estas variables eran
compartidas entre las diferentes sessiones que se iniciaran en el sistema,
volviendose loko cuando un nuevo usuario se conectaba y las modificaba.

La clase Global.cs tiene el sigte aspecto:
public class Global{
public static string cadena = "";
}

Lo que se busca o pretende es, contar con variables globales por usuario,
que no se compartan entre ellos.
Estudiamos la opcion del manejo de session, pero el cambio seria brutal, Que
otra opcion se puede implementar??

Gracias
=(

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
16/01/2008 - 08:48 | Informe spam
"csharp1" wrote in message
news:
Tengo una aplicacion c# desarrollada en visual studio 2005, la cual tiene
una clase Global.cs (dentro de app_code)que tiene muchas variables
estaticas para su uso general dentro de la aplicacion.

El problema es que se ignoraba que al hacer esto, estas variables eran
compartidas entre las diferentes sessiones que se iniciaran en el sistema,
volviendose loko cuando un nuevo usuario se conectaba y las modificaba.

La clase Global.cs tiene el sigte aspecto:
public class Global{
public static string cadena = "";
}

Lo que se busca o pretende es, contar con variables globales por usuario,
que no se compartan entre ellos.
Estudiamos la opcion del manejo de session, pero el cambio seria brutal,
Que otra opcion se puede implementar??



Se me ocurre esta posible solución:

- Quitar los "static" de las variables de la clase Global.
- Renombrar la clase Global a otra cosa (por ejemplo CGlobal).
- En el Session_Start del Global.asax, poner Session["Global"]=new
CGlobal();
- Compilar. El compilador dará un error en todos los sitios donde se
llame a Global.AlgunaVariable, dado que ya no existe Global. Ir haciendo
click en cada error y cambiar Global por ((CGlobal)Session["Global"]). Para
simplificar, se puede escribir un método o propiedad que devuelva este
valor.
Respuesta Responder a este mensaje
#2 Jesús López
16/01/2008 - 14:06 | Informe spam
Yo no veo tan brutal el cambio para usar variables de sesión, ya que
simplemente habría que cambiar la clase Global. Sencillamente cada una de
esas variables habría que convertirlas a propiedades que accedieran a las
variables de sesión.

Por ejemplo para la variable cadena que has puesto de ejemplo sería así:

public class Global
{
public static string cadena
{
get
{
return (string) HttpContext.Current.Session["cadena"];
}
set
{
HttpContext.Current.Session["cadena"] = value;
}
}

}

De esta manera no hay que hacer ningún cambio en el resto de código de la
aplicación, todo seguiría igual.

Saludos:


Jesús López
www.solidq.com






"csharp1" escribió en el mensaje
news:
Que tal amigos,
Tengo una aplicacion c# desarrollada en visual studio 2005, la cual tiene
una clase Global.cs (dentro de app_code)que tiene muchas variables
estaticas para su uso general dentro de la aplicacion.

El problema es que se ignoraba que al hacer esto, estas variables eran
compartidas entre las diferentes sessiones que se iniciaran en el sistema,
volviendose loko cuando un nuevo usuario se conectaba y las modificaba.

La clase Global.cs tiene el sigte aspecto:
public class Global{
public static string cadena = "";
}

Lo que se busca o pretende es, contar con variables globales por usuario,
que no se compartan entre ellos.
Estudiamos la opcion del manejo de session, pero el cambio seria brutal,
Que otra opcion se puede implementar??

Gracias
=(

Respuesta Responder a este mensaje
#3 csharp1
16/01/2008 - 16:04 | Informe spam
Gracias amigo, esa era!!!


"Jesús López" escribió en el
mensaje news:
Yo no veo tan brutal el cambio para usar variables de sesión, ya que
simplemente habría que cambiar la clase Global. Sencillamente cada una de
esas variables habría que convertirlas a propiedades que accedieran a las
variables de sesión.

Por ejemplo para la variable cadena que has puesto de ejemplo sería así:

public class Global
{
public static string cadena
{
get
{
return (string) HttpContext.Current.Session["cadena"];
}
set
{
HttpContext.Current.Session["cadena"] = value;
}
}

}

De esta manera no hay que hacer ningún cambio en el resto de código de la
aplicación, todo seguiría igual.

Saludos:


Jesús López
www.solidq.com






"csharp1" escribió en el mensaje
news:
Que tal amigos,
Tengo una aplicacion c# desarrollada en visual studio 2005, la cual tiene
una clase Global.cs (dentro de app_code)que tiene muchas variables
estaticas para su uso general dentro de la aplicacion.

El problema es que se ignoraba que al hacer esto, estas variables eran
compartidas entre las diferentes sessiones que se iniciaran en el
sistema, volviendose loko cuando un nuevo usuario se conectaba y las
modificaba.

La clase Global.cs tiene el sigte aspecto:
public class Global{
public static string cadena = "";
}

Lo que se busca o pretende es, contar con variables globales por usuario,
que no se compartan entre ellos.
Estudiamos la opcion del manejo de session, pero el cambio seria brutal,
Que otra opcion se puede implementar??

Gracias
=(





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