строго типизированные сессии в asp.net
Простите, если этот вопрос уже задавался.HttpContext.Current.Session["key"]
возвращает объект, и мы должны были бы привести его к этому конкретномуType
прежде чем мы могли бы использовать это. Я смотрел на различные реализации типизированных сессий
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
и я чувствовал, что нам нужно добавить еще немного кода (поправьте меня, если я ошибаюсь) в SessionManager, если мы хотим добавить новыйType
объекта в сеанс, либо в качестве метода, либо в качестве отдельной оболочки. Я думал, что мы могли бы использовать дженерики
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
Есть ли присущие преимущества в использовании
SessionManager<ClassType>.GetSession("sessionString")
чем с помощью
HttpContext.Current.Session["sessionString"] as ClassType
Я также думал, что было бы неплохо иметь что-то вродеSessionManager["sessionString"] = objToStoreInSession
, но обнаружил, что статический класс не может иметь индексатор. Есть ли другой способ добиться этого?
Моя мысль была создать SessionObject, который будет хранитьType
и объект, затем добавьте этот объект в сеанс (используя SessionManager) с помощью ключа. При получении приведите все объекты кSessionObject
, получите тип (скажем t) и объект (скажем, obj) и приведитеobj
какt
и верни это.
public class SessionObject { public Type type {get;set;} public Object obj{get;set;}<br>}
это не будет работать так же (так как возвращаемая подпись будет такой же, но типы возврата будут другими).
Есть ли другой элегантный способ сохранения / извлечения объектов в сеансе более безопасным способом