Простите, если этот вопрос уже задавали. 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
и объект, а затем добавить этот объект в Session (используя SessionManager) с ключом. При извлечении приведите все объекты кSessionObject
, получите тип (скажем, t) и объект (скажем, obj), приведитеobj
какt
и верните его.public class SessionObject { public Type type {get;set;} public Object obj{get;set;}
}
это тоже не сработает (так как обратная подпись будет такой же, но типы возврата будут разными).
Есть ли какой-либо другой элегантный способ сохранения / извлечения объектов в сеансе более безопасным способом