2010-12-30 4 views
5

Если мы объявим переменную static в Global.asax, то как получить к ней доступ на странице ASP.NET?Как получить доступ к статическим членам Global.asax?

<script runat=server"> 

    public static object myObject = new MyClass(); 

    // Application_Start() and other stuff goes here. 

</script> 

И, это хорошая идея для хранения глобального объекта (тот же экземпляр для всех запросов)?

+0

Хороший вопрос, предполагая, что вы всегда повторно инициализируете объект в Application_Start(). –

+0

переменная 'static' не может быть найдена, хотя' asp.net' разрешает объявление. Если мы знаем кодирование внутри карт «Global.asax», к какому классу мы можем получить доступ к этой переменной. – Xaqron

+0

Это звучит так, будто вы идете об этом полностью назад, Xaqron. Может быть, если вы опубликуете вопрос «большего изображения», вы получите более удовлетворительный ответ. – Greg

ответ

0

Возможно, лучше создать свой объект как одноэлементный, а не помещать его как «глобальный» объект. Создайте его в начале приложения и уничтожьте его в конце приложения. Пока вам не нужно, чтобы это было через веб-фермы, вы довольно безопасны.

Просмотреть это сообщение и его комментарии.

http://weblogs.asp.net/jeff/archive/2007/09/21/how-do-you-get-a-true-singleton-in-an-asp-net-app.aspx

4

MyObject должен быть доступен для всех методов в global.asax и внутри ваших страниц ASP.NET с помощью

Global.myObject 
+0

Я собираюсь использовать его внутри «HttpHandler», поэтому у меня есть доступ к «HttpContext», но его нет. – Xaqron

+0

вы можете сделать это, но немного по-другому для обработчиков. см. этот ответ http://bit.ly/eT4E71 – phillip

+1

@philip: Пожалуйста, не используйте сокращения URL в stackoverflow. Либо используйте полный URL-адрес, либо используйте '[Url Title] (http://www.example.com/address)'. – Brian

0

Лично я бы сильно проголосовать против использования глобальных переменных в ASP.NET. Несколько лет назад у меня были довольно неприятные переживания.

Вы должны синхронизировать доступ к членам своего глобального экземпляра MyClass, чтобы убедиться, что он работает правильно в многопоточном сценарии (что, скорее всего, обязательно, если требуется несколько запросов).

Существует также ApplicationState, который вы можете использовать, according to Microsoft, you shouldn't.

+1

, если это неизменно, это может быть хорошо, чтобы использовать его – Omu

0

Global не определен , который работает для меня:

ASP.global_asax пример

ASP.global_asax.DefaultModel.GetTable ("Ключевые слова");