stark typisierte Sessions in asp.net
Entschuldigen Sie, wenn diese Frage bereits gestellt wurde.HttpContext.Current.Session["key"]
Gibt ein Objekt zurück, und wir müssten es auf dieses Objekt umwandelnType
bevor wir es benutzen konnten. Ich habe mir verschiedene Implementierungen von typisierten Sessions angesehen
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
und ich hatte das Gefühl, dass wir dem SessionManager etwas mehr Code hinzufügen müssen (korrigieren Sie mich, wenn ich falsch lag), wenn wir einen neuen hinzufügen möchtenType
des Objekts in die Sitzung, entweder als Methode oder als separater Wrapper. Ich dachte, wir könnten Generika gebrauchen
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;
}
}
Gibt es einen inhärenten Vorteil bei der Verwendung
SessionManager<ClassType>.GetSession("sessionString")
als mit
HttpContext.Current.Session["sessionString"] as ClassType
Ich dachte auch, dass es schön wäre, so etwas zu habenSessionManager["sessionString"] = objToStoreInSession
, stellte jedoch fest, dass eine statische Klasse keinen Indexer haben kann. Gibt es eine andere Möglichkeit, dies zu erreichen?
Mein Gedanke war, ein SessionObject zu erstellen, in dem das gespeichert wirdType
und das Objekt, und fügen Sie dieses Objekt dann mit dem Schlüssel zu Sitzung hinzu (mithilfe eines Sitzungsmanagers). Wirken Sie beim Abrufen alle Objekte inSessionObject
, nimm den Typ (sag t) und das Objekt (sag obj) und wirkeobj
wiet
und gib es zurück.
public class SessionObject { public Type type {get;set;} public Object obj{get;set;}<br>}
Dies würde nicht so gut funktionieren (da die Rückgabesignatur dieselbe wäre, die Rückgabetypen jedoch unterschiedlich sind).
Gibt es eine andere elegante Möglichkeit, Objekte in einer Sitzung typsicherer zu speichern / abzurufen?