У меня есть класс с именем UserContext
, который отслеживает действия данного пользователя на моем веб-сайте.Это должен быть одноэлементный класс (только один экземпляр на пользователя).В приложении Windows Forms я мог бы написать что-то вроде этого:
Class UserContext
Public Shared Current As New UserContext()
Private Sub New(appName As String)
[...]
End Class
Но в приложении ASP.net это будет доступно всем текущим пользователям.
Если этот классбыли использованы только внутри сущности Page, я мог просто сохранить экземпляр UserContext в переменной Page - он не обязательно должен выживать постбэков.Но другие сущности (которые не знают о Page) также вызывают UserContext, и я бы хотел, чтобы им всем был дан один и тот же экземпляр.
Что я могу сделать, чтобы гарантировать, что класс является толькосоздается один раз за http запрос (или за пользователя)? Могу ли я использовать кеш для этого?
Public Shared Function GetContext() As UserContext
If HttpContext.Current.Cache("CurrentUserContext") Is Nothing Then HttpContext.Current.Cache("CurrentUserContext") = New UserContext()
Return HttpContext.Current.Cache("CurrentUserContext")
End Function
Может ли состояние сеанса быть лучшим вариантом?
Кэш и состояние сеанса оба сохраняют постбэки - есть ли другой параметр, который сбрасывается при каждом новом запросе?
Спасибо заВаша помощь!