Изменение файла web.config приведет к обновлению веб-сайта IIS. Будет ли оно также запускать статический конструктор снова? - PullRequest
2 голосов
/ 27 июня 2019

У меня есть статический класс, который загружает значение моей строки подключения каждый раз, когда необходимо установить соединение. Это сделано, чтобы гарантировать, что самая новая строка соединения используется, когда это изменено. Но это для сайта, размещенного в IIS, поэтому сайт перезапускается каждый раз, когда в любом случае изменяется web.config.

Таким образом, строка подключения также может быть загружена статически:

using System.Configuration;

public static class Settings
{
    static Settings()
    {
        Database = ConfigurationManager.ConnectionStrings["database"].ConnectionString;
        Timeout = ConfigurationManager.AppSettings["timeout"];
    }

    public static string Database { get; }
    public static string Timeout { get; }
}

Позволит ли это изменить подключение к базе данных для сайта IIS после развертывания?
А для службы Windows?

Редактировать: Видимо, вопрос был сформулирован плохо. Я знаю, как обеспечить перезагрузку сконфигурированного значения, вопрос в том, будет ли эта конкретная установка делать эту работу. Это вопрос да / нет.
Я знаю, как сделать так, чтобы свойство читалось каждый раз. Моя забота о производительности. Чтение файлов каждый раз дорого. Я бы предпочел просто получить доступ к статическому свойству. Учитывая, что сохранение файла web.config перезапустит веб-сайт и, таким образом, файл все равно будет прочитан; мой код также не должен делать это. Итак, более конкретный вопрос:
Повлияет ли сохранение файла web.config на мой статический конструктор, поэтому повторно загружает значение конфигурации?
Другое редактирование: также изменил вопрос вверху.

1 Ответ

2 голосов
/ 27 июня 2019

Начиная с C # 6.0, вы можете использовать свойства тела выражения только для чтения , поэтому ваш класс можно записать так:

с использованием System.Configuration;

public static class Settings
{
    public static string Database => ConfigurationManager.ConnectionStrings["database"].ConnectionString;
    public static string Timeout => ConfigurationManager.AppSettings["timeout"];
}

Свойства тела выражения будут выполнять выражение каждый раз, когда к ним обращаются, поэтому, если в файле конфигурации произошло изменение, вам даже не нужно перезапускать службу.

Дальнейшее чтение: Это сообщение SO и тот, с которым он связан .

...