Как обрабатывать статические переменные в библиотеке, которая используется как для настольных компьютеров, так и для Интернета?

StackOverflow https://stackoverflow.com/questions/1912890

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть несколько классов библиотеки C#, которые используют статические переменные.Я использую эти классы библиотеки как для настольных, так и для веб-приложений.Проблема в том, что, как я только что обнаружил, статические переменные не очень хорошо работают на веб-сервере;значения являются общими для всех сеансов использования веб-сайта!

Как я могу сохранить функции статической переменной для использования в моих настольных приложениях, гарантируя при этом, что каждый сеанс на моем веб-сервере имеет свои собственные независимые значения для этих переменных, но внутри самого сеанса она по-прежнему ведет себя как статическая?

Это было полезно?

Решение

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

Если вы можете изменить код этой общей библиотеки, я бы посоветовал вам извлечь из этих статических переменных интерфейс, который обеспечит механизм хранения значений.Это позволит каждому приложению предоставить свою собственную реализацию.Для приложения Windows вы можете использовать реализацию, которая внутри использует статическую переменную.Для приложения ASP.NET вы можете использовать метод Session.Но во всех случаях вы выставляете только интерфейс.Это также будет иметь положительный побочный эффект, заключающийся в упрощении модульного тестирования вашего кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top