HttpModule и статический класс, несколько запросов используют одни и те же статические данные? - PullRequest
3 голосов
/ 17 июля 2009

Я написал ASP.NET HttpModule и у меня есть статический вспомогательный класс, который используется для загрузки и хранения данных конфигурации в течение срока действия запроса.

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

    public static void SetConfigName (string configName)
    {
        // load data specific to given configName
    }

Существуют также статические методы Get (), которые вызываются позже во время обработки HttpRequest.

Загружаемые данные конфигурации могут быть разными для каждого запроса (в зависимости от значений в URL), поэтому я не хочу, чтобы другие запросы передавали статические данные после вызова SetConfigName. *

Таким образом, вопрос заключается в том, разделяют ли несколько запросов одни и те же статические данные, или каждый новый запрос получает отдельную копию статического класса? (И если данные являются общими, как их избежать? Является ли единственной альтернативой сделать их нестатическим классом?)

(Кстати, я не использую global.asax.)

Ответы [ 2 ]

3 голосов
/ 17 июля 2009

Статические данные распределяются между запросами. Для хранения статических данных для 1 запроса вы должны использовать HttpContext.Current.Items.

1 голос
/ 17 июля 2009

Несколько запросов имеют одни и те же статические данные. Единственный способ обойти это - всегда возвращать информацию на основе текущего запроса, а не просто возвращать сохраненные статические данные. Если это не вариант, то да, вам нужно сделать его нестатическим классом.

...