Запомните состояние объекта в подпроекте
Я работаю над сайтом с 2 подпроектами. Подпроекты упоминаются так:
=> На моем сайте есть ссылка на проект Business Layer
=> Бизнес-уровень проекта имеет ссылку на уровень данных проекта
Посетители должны войти в систему. Там информация сохраняется в БД. В моей БД у меня есть другая информация о конфигурации, которая необходима для того, чтобы веб-сайт вычислял правильную информацию.
Пример:
Пользователь A входит на веб-сайт, и информация о конфигурации сохраняется в имени объекта: UserInfo. Класс UserInfo также является частью моего бизнес-уровня.
После этого мне всегда нужно создать свой объект из cookie или Session и вызвать мой объект Business Layer следующим образом:BL.CalculatePrice(UserInfo.RegionID)
BL.CalculateTotal(UserInfo.RegionID)
Есть ли способ сохранить состояние объекта "пользователь" между изменениями веб-страниц в моем проекте Business Layer без необходимости отправлять ссылку (UserInfo.RegionID) при каждом вызове с веб-сайта?
1 ответ
Вы могли бы использовать различные вещи
- Сохраните информацию в сеансе
- Создайте статическую коллекцию и утилизируйте информацию вручную через определенное время.
- То же, что и 2., но используйте что-то вроде MemoryCache с истечением срока действия, чтобы вам не приходилось обрабатывать срок действия вручную
- То же, что 3, но с использованием кеша http
Вот некоторые пространства имен / идеи для вас, чтобы проверить
- System.Web.HttpContext.Current.Session
- частный статический словарь
sessionInfo - System.Runtime.Caching.MemoryCache.Default
- 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 важно установить их, чтобы сервер не использовал слишком много памяти