Как создать глобальные переменные, ASP.NET, global asax
У меня есть некоторые классы слоев данных, которые должны использоваться очень часто почти на всем сайте.
Я работал над приложением windows ранее, и я использовал для создания его объекта в модуле (vb.net) но теперь я работаю на C# и на ASP.NET.
теперь мне нужно сделать то же самое, чтобы мне не нужно было создавать один и тот же объект несколько раз на каждой странице.
Я хочу использовать что-то вроде глобальной переменной.
Как я могу это сделать?
Это сделано использование global.асакс
могу ли я создать свои объекты в global.асакс
Я новичок в asp.net, поэтому попробуйте дать синтаксис вместе с объяснением.
5 ответов
вам на самом деле не нужно использовать global.асакс. Вы можете создать класс, который предоставляет ваши объекты как static
s. Это, пожалуй, самый простой способ
public static class GlobalVariables {
public static int GlobalCounter { get; set; }
}
вы также можете использовать Состояния Приложения или даже ASP.NET кэш потому что они совместно используются во всех сеансах.
однако, если бы я был в этой ситуации, я бы использовал фреймворк, как Spring.NET для управления всеми моими экземплярами Sington.
здесь является быстрым примером того, как вы получите экземпляры класса, используя Spring.NET
//The context object holds references to all of your objects
//You can wrap this up in a helper method
IApplicationContext ctx = ContextRegistry.GetContext();
//Get a global object from the context. The context knows about "MyGlobal"
//through a configuration file
var global = (MyClass)ctx.GetObject("MyGloblal");
//in a different page you can access the instance the same way
//as long as you have specified Singleton in your configuration
но на самом деле, больший вопрос здесь в том, почему вам нужно использовать глобальные переменные? Я предполагаю, что вы действительно не нуждаетесь в них, и для вас может быть лучшее решение для большой картины.
Я пропущу часть "должен" об использовании глобальных переменных в .NET и покажу некоторый код, в котором я работаю сейчас, который использует глобальные.асакс для некоторых "глобальных" переменных. Вот некоторая информация из этого файла:
public class Global : System.Web.HttpApplication
{
public enum InvestigationRole
{
Complainent,
Respondent,
Witness,
}
public static string Dog = "Boston Terrier";
}
таким образом, со страниц ASPX вы можете получить доступ к этим членам, открыв статический глобальный класс следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
string theDog = Global.Dog;
// copies "Boston Terrier" into the new string.
Global.InvestigationRole thisRole = Global.InvestigationRole.Witness;
// new instance of this enum.
}
покупатель остерегайтесь. Есть лучшие способы обработки концепции "глобальных переменных" в мире .NET, но выше будет по крайней мере, получите слой абстракции выше повторения одних и тех же строк на всех ваших страницах ASPX.
"ASP.NET обзор состояния приложения " содержит объект, который может использоваться для хранения данных всех пользователей, подобно объекту сеанса с точки зрения возможности хранения различных пар ключ-значение.
использовать общественные структуры. Они более эффективны, чем классы, и более гибки, чем перечисления.
создайте файл (желательно в папке "/ Classes") со следующим кодом:
public struct CreditCardReasonCodes
{
public const int Accepted = 100;
public const int InsufficientFunds = 204;
public const int ExpiredCard = 202;
}
важно: не помещайте пространство имен, чтобы структура была видна глобально в вашем веб-приложении.
чтобы ссылаться на него в коде просто используйте следующий синтаксис:
if (webServiceResult == CreditCardReasonCodes.Accepted)
{
Console.WriteLine("Authorization approved.")
}
использование членов "const" также делает ваши значения неизменяемый во время компиляции без возможности их изменения во время выполнения приложения.