Как создать глобальные переменные, ASP.NET, global asax

У меня есть некоторые классы слоев данных, которые должны использоваться очень часто почти на всем сайте.

Я работал над приложением windows ранее, и я использовал для создания его объекта в модуле (vb.net) но теперь я работаю на C# и на ASP.NET.

теперь мне нужно сделать то же самое, чтобы мне не нужно было создавать один и тот же объект несколько раз на каждой странице.
Я хочу использовать что-то вроде глобальной переменной.

Как я могу это сделать?
Это сделано использование global.асакс
могу ли я создать свои объекты в global.асакс

Я новичок в asp.net, поэтому попробуйте дать синтаксис вместе с объяснением.

5 ответов


вам на самом деле не нужно использовать global.асакс. Вы можете создать класс, который предоставляет ваши объекты как statics. Это, пожалуй, самый простой способ

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" также делает ваши значения неизменяемый во время компиляции без возможности их изменения во время выполнения приложения.