#.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"