2008-10-30 11 views

Respuesta

17

Puede acceder a la clase como esta:

((Global)this.Context.ApplicationInstance).Roles 
+1

Esta idea funcionó para mí pero tuve que modificar ligeramente su ejemplo: ((global_asax) Context.ApplicationInstance) .Roles Por alguna razón en mi proyecto, el elemento global.asax tenía el tipo global_asax. – minty

+5

Me tomó un tiempo entender por qué esto no funcionó para las propiedades que están destinadas a vivir durante todo el tiempo de la aplicación. Por ejemplo: si crea "Roles" en el ejemplo anterior en "Application_Start", el uso de ApplicationInstance para acceder a la propiedad "Roles" puede fallar porque no hay una sola "instancia de aplicación global" para cada solicitud. Para tener propiedades globalmente existentes en global.asax, esas propiedades deben ser estáticas. La siguiente publicación de blog me ayudó mucho a comprender lo que está sucediendo: http://odetocode.com/articles/89.aspx – Slauma

+0

global_asax está creando un conflicto. Y el tipo Global o namspace no se encuentra. ¿Que debería hacer? –

3

Me parece que eso solo depende de la sesión, ¿por qué no hacer un par de métodos estáticos que toman la sesión como un parámetro? Luego puede pasar el valor de la propiedad "Sesión" de la página. (Todo lo que hace tienen acceso a la HttpApplication se acaba de hacer referencia a su propiedad de sesiones, por supuesto.)

+0

Lo siento, he desvinculado tu publicación. Como he estado pensando, tienes toda la razón. Quiero cambiar mi voto a un voto positivo, pero stackoverflow no me deja más. Por favor acepte mi agradecimiento en su lugar. – minty

+0

@minty: Simplemente haga clic en el voto resaltado y lo deshará. Eso puede permitirle votar luego. –

+0

Esta es una buena idea, pero ajustar el valor de una propiedad puede ayudar a proteger contra el uso incorrecto. Por supuesto, si la variable de respaldo está en la sesión, entonces todavía debe preocuparse por las personas que acceden a ella directamente. – Trisped

2

Si esta es una propiedad que necesita para acceder a todas las páginas, es posible que una mejor definición de una página base que todos sus otras páginas extienden ...

eg por defecto

public partial class _Default : System.Web.UI.Page 
{ 
} 

Lo que podría hacer es añadir unas BasePage.cs a la carpeta App_Code

public class BasePage : System.Web.UI.Page 
{ 
    public List<string> Roles 
    { 
     get { ... } 
     set { ... } 
    } 
} 

Y luego tienen sus páginas se extienden esto.

public partial class _Default : BasePage 
{ 
} 
+0

¿Cómo afectaría esto al diseñador de estudio visual, etc.? – minty

0

Si los valores son dependientes de la sesión, entonces esto es realmente simple usando el Diccionario HttpContext.Items:

Coloque este código en el Global.asax para almacenar el valor:

Dim someValue As Integer = 5 
Context.Items.Add("dataKey", someValue) 

Vamos retreive en una página con este código:

Dim someValue As Integer = CType(HttpContext.Current.Items("dataKey"), Integer) 

Aquí hay un enlace que lo describe con más detalle: http://aspnet.4guysfromrolla.com/articles/060904-1.aspx

1

Hey, estoy haciendo estallar mi cereza stackoverflow.com! Mi primera respuesta después de acechar durante un mes.

Para acceder a una propiedad definida en su clase mundial, utilice uno de los siguientes:

  • la propiedad de aplicación definido tanto en el HttpApplication y clases de página (por ejemplo Page.Application [ "TestItem"])

  • la propiedad HttpContext.ApplicationInstance (por ejemplo HttpContext.Current.ApplicationInstance)

Con cualquiera de estos, se puede c sea ​​el resultado para su tipo Global y acceda a la propiedad que necesita.

0

En el .asax global para .net 3.5 utilicé typeof (global_asax) y funcionó bien. Y, lo que realmente me llevó aquí fue implementar los ejemplos de OpenID de DotNet. Cambié algo para usar el caché de la aplicación como lo sugirió Will.

1

también puede utilizar la siguiente sintaxis:

((Global)HttpContext.Current.ApplicationInstance).Roles 
0

Para otras capas del proyecto que no es posible tener global como clase:

dynamic roles= ((dynamic)System.Web.HttpContext.Current.ApplicationInstance).Roles; 
if (roles!= null){ 
    // my codes 
} 

acabo de estar seguro de la La propiedad Roles en la clase Global nunca cambia. y otra forma es por reflexión.

Cuestiones relacionadas