2010-12-30 17 views
5

Jeśli zadeklarujemy zmienną static w Global.asax, to w jaki sposób uzyskać do niej dostęp na stronie ASP.NET?Jak uzyskać dostęp do statycznych członków Global.asax?

<script runat=server"> 

    public static object myObject = new MyClass(); 

    // Application_Start() and other stuff goes here. 

</script> 

Czy jest to dobry pomysł na przechowywanie obiektu globalnego (to samo wystąpienie dla wszystkich żądań)?

+0

Dobre pytanie, zakładając, że zawsze ponownie zainicjujesz obiekt w Application_Start(). –

+0

'static 'zmienna nie może zostać znaleziona, chociaż' asp.net' pozwala na deklarację. Jeśli znamy kodowanie wewnątrz map "Global.asax", do której klasy możemy uzyskać dostęp do tej zmiennej. – Xaqron

+0

To brzmi jak mówisz o tym całkowicie wstecz, Xaqron. Może jeśli napiszesz pytanie "większy obrazek", uzyskasz bardziej satysfakcjonującą odpowiedź. – Greg

Odpowiedz

4

myObject powinny być dostępne dla wszystkich metod w global.asax i wewnętrznych stron ASP.NET przy użyciu

Global.myObject 
+0

Użyję go wewnątrz 'HttpHandler', więc mam dostęp do' HttpContext', ale go tam nie ma. – Xaqron

+0

można to zrobić, ale tylko trochę inaczej dla obsługi. zobacz tę odpowiedź http://bit.ly/eT4E71 – phillip

+1

@philip: Proszę nie używać skrótów URL na stackoverflow. Użyj pełnego adresu URL lub użyj "[Tytuł URL] (http://www.example.com/adres)". – Brian

0

Osobiście mocno głosować przeciwko użyciu zmiennych globalnych w ASP.NET. Miałem dość złe doświadczenia kilka lat temu.

Należy zsynchronizować dostęp do członków globalnej instancji globalnej MyClass, aby upewnić się, że działa poprawnie w scenariuszu z wieloma wątkami (co jest prawdopodobne/obowiązkowe w przypadku wielu żądań).

Istnieje również ApplicationState, którego można użyć, according to Microsoft, you shouldn't.

+1

jeśli jest niezmienny, można go używać – Omu

0

Global nie jest zdefiniowana który pracuje dla mnie:

ASP.global_asax przykład

ASP.global_asax.DefaultModel.GetTable ("Tagi");

Powiązane problemy