глобальная переменная .net

#.net #variables

#.net #переменные

Вопрос:

каков наилучший способ настроить глобальную переменную, к которой я могу получить доступ через сайт .net. В принципе, я хочу использовать ее как флаг типа «да» / «нет», на который я могу ссылаться с любой страницы.

Спасибо

Ответ №1:

Обычно к глобальным переменным относятся неодобрительно, но если это соответствует вашим предпочтениям в дизайне, тогда вы можете использовать статический класс со статическими членами.

Ответ №2:

Один из способов, который еще не был подробно описан (хотя и упоминался), — это использование AppSetting значения из web.config файла.

Сначала в web.config файл в разделе <configuration> добавьте следующее:

 <appSettings>
    <add key="MyGlobalVar" value="true"/>
</appSettings>
  

<appSettings> Раздел может уже существовать, в таком случае просто добавьте <add ... к нему.

Во-вторых, чтобы иметь возможность читать из нее, добавьте ссылку на System.Configuration assembly в свой проект.

Наконец, чтобы прочитать значение с любой страницы, используйте такой код:

 string myGlobalValue = System.Configuration.ConfigurationManager.AppSettings["MyGlobalVar"];
  

Затем вы можете изменить значение в .config файле, и его сохранение приведет к «перезапуску» веб-приложения, поскольку пул будет переработан.

Ответ №3:

это очень простой вопрос. вы можете создать и установить общедоступную статическую переменную bool в любом месте, где захотите. примером является:

 public static class ProgramSettings
    {
        public static bool Flag = false;
    }
  

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

Комментарии:

1. Это приведет к сбою в Web Garden с несколькими процессами для одного и того же пула веб-приложений.

2. Привет, что мне нужно сделать в web.config, чтобы разрешить это? Спасибо

3. @Shadow Wizard что приведет к сбою, решение web.config? и почему?

4. у статической переменной действительно есть «область видимости» — запущенный процесс, в котором она объявлена и установлена. Если у вас есть два w3wp.exe процесса, у каждого будет своя копия статических переменных, и изменение статической переменной в одном не повлияет на другой. Был там, обожжен этим и с тех пор пытается предупредить других. 🙂

Ответ №4:

Для этого вы можете использовать ключевое слово static. Также я предлагаю вам проверить перечисления в c#

Ответ №5:

Поскольку вы говорите «флаг», я бы использовал const , поскольку это предотвращает изменение bool в любом месте кода:

 public static class ApplicationFlags
{
    public const bool MyFlag = false;
}


if (ApplicationFlags.MyFlag)
    Reponse.Write("Ohh, my!");
  

Вы также могли бы использовать статические поля. Пожалуйста, обратите внимание, что статические поля не являются потокобезопасными. Если вы измените их в одном потоке (один http-запрос), это также будет изменено для всех других потоков.

Ответ №6:

Если вы хотите сохранить их для каждого пользователя, и они могут периодически меняться из-за того, что пользователь выполнял определенное поведение, то, возможно, вам лучше всего использовать переменные сеанса.

VB:

 Session("FirstName") = FirstNameTextBox.Text
Session("LastName") = LastNameTextBox.Text
  

C#:

 Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;
  

Вы можете сохранять любые ссылки или типы значений в сеансе. Просто помните, что до тех пор, пока эти значения сохраняются, они занимают оперативную память на серверах для любых пользователей, у которых установлены эти переменные.

Если вы хотите сохранить глобальную переменную, которая используется для всех пользователей, то вы могли бы использовать глобальные статические переменные.

Если вы уже знаете значение, и оно никогда не изменится, тогда вы могли бы сделать что-то вроде:

 static string ImportantData = @"Some String That Will Never Change";
  

Ответ №7:

да, как сказал TakeMeAsAGuest

сделайте класс статическим, чтобы в нем были все нужные вам значения конфигурации

 public static class ProgramSettings
    {
        private static bool _flag = false;
        public static bool Flag
        {
          get { return _flag; }
          set { _flag = value; }
        }
    }
  

при запуске приложения задайте нужные вам свойства и прочитайте его из xml-файла или прочитайте его из web.config, добавив в web.config

   <appSettings>
    <add key="flag" value="true" />
  </appSettings>
  

и прочитайте это в application_start как

 using System.Configuration;    
ProgramSettings.Flag = ConfigurationManager.AppSettings["flag"]
  

Мои наилучшие пожелания

Комментарии:

1. в какой файл лучше всего это поместить? (я запускаю проект MVC4)

Ответ №8:

Вы можете создать переменную с помощью Application Object .

Добавьте следующий код к Application_Start событию в модуле разработки кода для глобального файла.asax:

 Application("abc") = "hi"