строго типизированные сессии в 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>}

это не будет работать так же (так как возвращаемая подпись будет такой же, но типы возврата будут другими).

Есть ли другой элегантный способ сохранения / извлечения объектов в сеансе более безопасным способом

Ответы на вопрос(5)

Ваш ответ на вопрос