Um dem zu folgen, was andere gesagt haben. Ich neige dazu, zwei Schichten zu haben:
Die Kernschicht. Dies befindet sich in einer DLL, die fast allen Web-App-Projekten hinzugefügt wird . In dieser habe ich eine SessionVars-Klasse, die das Grunzen für Session State Getter / Setter erledigt. Es enthält Code wie den folgenden:
public class SessionVar
{
static HttpSessionState Session
{
get
{
if (HttpContext.Current == null)
throw new ApplicationException("No Http Context, No Session to Get!");
return HttpContext.Current.Session;
}
}
public static T Get<T>(string key)
{
if (Session[key] == null)
return default(T);
else
return (T)Session[key];
}
public static void Set<T>(string key, T value)
{
Session[key] = value;
}
}
Beachten Sie die Generika zum Abrufen eines beliebigen Typs.
Ich füge dann auch Getters / Setter für bestimmte Typen hinzu, insbesondere für Zeichenfolgen, da ich es oft vorziehe, mit Zeichenfolgen zu arbeiten. Leere statt Null für Variablen, die Benutzern angezeigt werden.
z.B:
public static string GetString(string key)
{
string s = Get<string>(key);
return s == null ? string.Empty : s;
}
public static void SetString(string key, string value)
{
Set<string>(key, value);
}
Und so weiter...
Ich erstelle dann Wrapper, um das zu abstrahieren und es auf das Anwendungsmodell zu bringen. Zum Beispiel, wenn wir Kundendaten haben:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
Verstehst du die Idee richtig? :) :)
HINWEIS: Ich hatte gerade einen Gedanken, als ich der akzeptierten Antwort einen Kommentar hinzufügte. Stellen Sie immer sicher, dass Objekte serialisierbar sind, wenn Sie sie in Session speichern, wenn Sie einen Statusserver verwenden. Es kann allzu einfach sein, ein Objekt mithilfe der Generika zu speichern, wenn es sich in einer Webfarm befindet, und es boomt. Ich stelle auf einer Webfarm bei der Arbeit bereit und füge meinem Code in der Kernebene Überprüfungen hinzu, um festzustellen, ob das Objekt serialisierbar ist. Ein weiterer Vorteil der Kapselung der Session Getter und Setter :)