Следовать тому, что сказали другие. Я склонен иметь два слоя:
Основной слой. Это внутри библиотеки DLL, которая добавляется почти во все проекты веб-приложений . В этом у меня есть класс SessionVars, который выполняет основную работу для методов получения / установки состояния сеанса. Он содержит код, подобный следующему:
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 для определенных типов, особенно для строки, так как я часто предпочитаю работать со строкой. Пустые, а не нулевые для переменных, представляемых пользователям.
например:
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);
}
}
}
Вы правильно поняли идею? :)
ПРИМЕЧАНИЕ: Просто подумал при добавлении комментария к принятому ответу. Всегда гарантируйте, что объекты сериализуются при хранении их в сеансе при использовании сервера состояний. Может быть слишком легко попытаться сохранить объект с помощью универсальных шаблонов, когда он находится на веб-ферме, и он быстро развивается. Я развернул на веб-ферме на работе, поэтому добавил в свой код проверки на уровне ядра, чтобы убедиться, что объект сериализуем, еще одно преимущество инкапсуляции методов получения и установки сеанса:)