À suivre à partir de ce que les autres ont dit. J'ai tendance à avoir deux couches:
La couche de base. C'est dans une DLL qui est ajouté à presque tous les web app projets. En cela, j'ai une SessionVars classe qui fait le gros du travail pour l'état de la Session des getters/setters. Il contient le code suivant:
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;
}
}
Remarque les génériques pour obtenir n'importe quel type.
Je puis aussi ajouter des Getters/Setters pour des types spécifiques, en particulier de la chaîne depuis que j'ai souvent préfèrent travailler avec de la ficelle.Vide plutôt que null pour les variables présentées aux Utilisateurs.
e.g:
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);
}
Et ainsi de suite...
J'ai ensuite créer des wrappers pour résumé tout ça et de le ramener au modèle d'application. Par exemple, si nous avons des détails sur le client:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
Vous obtenez la bonne idée? :)
REMARQUE: Juste eu une pensée lors de l'ajout d'un commentaire à la accepté de répondre. Toujours s'assurer objets sont sérialisables lorsque les stocker dans la Session lors de l'utilisation d'un serveur d'état. Il peut être trop facile d'essayer et enregistrer un objet à l'aide de médicaments génériques, lorsque sur la batterie de serveurs web et aller boom. - Je déployer sur une batterie de serveurs web au travail donc ajouté des contrôles à mon code dans la couche de base pour voir si l'objet est sérialisable, un autre avantage de l'encapsulation de la Session Getters et Setters :)