Запомните состояние объекта в подпроекте

Я работаю над сайтом с 2 подпроектами. Подпроекты упоминаются так:
=> На моем сайте есть ссылка на проект Business Layer
=> Бизнес-уровень проекта имеет ссылку на уровень данных проекта

Посетители должны войти в систему. Там информация сохраняется в БД. В моей БД у меня есть другая информация о конфигурации, которая необходима для того, чтобы веб-сайт вычислял правильную информацию.

Пример:
Пользователь A входит на веб-сайт, и информация о конфигурации сохраняется в имени объекта: UserInfo. Класс UserInfo также является частью моего бизнес-уровня.

После этого мне всегда нужно создать свой объект из cookie или Session и вызвать мой объект Business Layer следующим образом:
BL.CalculatePrice(UserInfo.RegionID)
BL.CalculateTotal(UserInfo.RegionID)

Есть ли способ сохранить состояние объекта "пользователь" между изменениями веб-страниц в моем проекте Business Layer без необходимости отправлять ссылку (UserInfo.RegionID) при каждом вызове с веб-сайта?

1 ответ

Решение

Вы могли бы использовать различные вещи

  1. Сохраните информацию в сеансе
  2. Создайте статическую коллекцию и утилизируйте информацию вручную через определенное время.
  3. То же, что и 2., но используйте что-то вроде MemoryCache с истечением срока действия, чтобы вам не приходилось обрабатывать срок действия вручную
  4. То же, что 3, но с использованием кеша http

Вот некоторые пространства имен / идеи для вас, чтобы проверить

  1. System.Web.HttpContext.Current.Session
  2. частный статический словарь sessionInfo
  3. System.Runtime.Caching.MemoryCache.Default
  4. System.Web.HttpContext.Current.Cache

Лично я бы выбрал MemoryCache (он более новый и в некотором роде заменяет httpCache), я использую его в проекте для реализации полуобобщенного класса, который использует MemoryCache в качестве слоя кеша между BLL и DAL.

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

Преимущество MemoryCache/Dictionary заключается в том, что им не нужна ссылка на HttpContext, и поэтому они могут использоваться вне веб-контекста. Но это не значит, что вместо этого вы не можете использовать HttpContext (это проще). Вы просто должны взвесить все за / против использования этого в дал / блл или нет.

Для MemoryCache не забудьте проверить: http://msdn.microsoft.com/en-us/library/dd941875.aspx важно установить их, чтобы сервер не использовал слишком много памяти

Другие вопросы по тегам