2012-02-08 15 views
5

Sto leggendo due valori da web.config nello Application_Start del mio Global.asax.cs. I valori stringa da web.config sono assegnati alle loro proprietà pubbliche, definite anche in Global.asax.cs.Come accedere a una proprietà creata in global.asax.cs?

Come accedere alle proprietà nel file global.asax.cs da un'altra classe, metodo e spazio dei nomi?

Aggiornamento n. 1 Questo è più complicato di quanto pensassi (o forse lo sto solo rendendo complicato). La classe in cui voglio fare riferimento a queste proprietà in una semplice libreria di classi e non ho accesso a httpcontext (o non so come accedervi).

risposta

1

Se il Global.asax.cs non manipola i valori, quindi è sufficiente leggere i valori del web.config, come già fate in global.asax.cs.

Tuttavia, se Global.asax.cs manipola i valori, è possibile scrivere i valori nell'oggetto "Applicazione".

void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 

     Application.Add("Foo", "Bar"); 

    } 

Infine, è possibile contrassegnare la proprietà che si desidera esporre da Globale come statica.

public static string Abc { get; set; } 
    void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 

     Abc = "123"; 

    } 
+0

Ho pensato di leggere i valori direttamente dal file di configurazione, come faccio nel global.asax.cs. Il problema è che questo sarebbe letto molte, molte volte e, per me, ha più senso leggerlo una volta, memorizzarlo in una variabile e fare riferimento alla variabile quando necessario. Stiamo usando EF e questo gestore di eventi (dove il valore è necessario) viene licenziato molto, quindi ci sarebbe un sacco di letture da web.config. – Joe

+0

In questo caso (un sacco di letture) si usa la cache. –

5

Trasmetti l'istanza dell'applicazione corrente al tuo tipo Global e accedi alle proprietà lì.

var app = (Your.App.Namespace.Global)HttpContext.Current.ApplicationInstance; 
var x = app.YourProperty; 
+2

@Greg_B Sarebbe effettivamente essere HttpContext.Current.ApplicationInstance come HttpContext.Current.Application è un HttpApplicationState un oggetto HttpApplication non oggetto. – rism

Problemi correlati