遵循别人所说的。我倾向于分为两层:
核心层。这在DLL中,几乎所有Web应用程序项目中都添加了DLL。在这里,我有一个SessionVars类,它可以为Session状态的获取器/设置器进行艰苦的工作。它包含如下代码:
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;
}
}
注意获取任何类型的泛型。
然后,我还为特定类型(尤其是字符串)添加Getters / Setters,因为我通常更喜欢使用string.Empty而不是为呈现给Users的变量设置null。
例如:
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);
}
等等...
然后,我创建包装器以将其抽象化,并将其引入应用程序模型。例如,如果我们有客户详细信息:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
您的想法正确吗?:)
注意:在已接受的答案中添加评论时,刚有了一个想法。使用状态服务器将对象存储在Session中时,请始终确保对象可序列化。在Web场上尝试使用泛型来保存对象可能太容易了,而且它日趋繁荣。我在工作时部署在Web场上,因此在核心层的代码中添加了检查,以查看对象是否可序列化,这是封装Session Getter和Setters的另一个好处:)