Жюри по-прежнему не работает, если класс должен храниться в сеансе в первую очередь. С приложением, на которое я задал этот вопрос, я решил не наполнить класс сессией, это действительно не было необходимо, я ленился. Разработка этого метода для управления сеансом стоила все время, поскольку это то, что беспокоило меня в течение некоторого времени в веб-разработке.
Что из моего исследования написало статический класс для управления моими переменными сеанса. Этот класс обрабатывает все чтения и записи на сеанс и сохраняет их все строго для ввода для загрузки. Это всегда беспокоило меня, используя повторяющийся код повсюду для сеанса. Удерживает опечатки.
Есть две статьи, которые мне нравятся, которые я нашел на этом, я могу найти только один из них и буду включать другой, когда я его найду.
Первый был в Code Project Это может быть второй link
Шаблон легко и прямо вперед. Я также создал класс для запросов на захват параметров из строк запросов url. Я не вижу причин не распространять его на файлы cookie.
Это было мое первое использование шаблона, я использовал только строки, поэтому частный метод немного ограничен, но его можно легко изменить, чтобы использовать любой класс или примитивный тип.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
namespace BDZipper.Site
{
/// <summary>
/// This class maintains all session variables for us instead of handeling them
/// individually in the session. They are also strongly typed.
/// </summary>
public static class SessionManager
{
# region Private Constants
// Define string constant for each property. We use the constant to call the session variable
// easier not to make mistakes this way.
// I think for simplicity, we will use the same key string in the web.config AppSettings as
// we do for the session variable. This way we can use the same constant for both!
private const string startDirectory = "StartDirectory";
private const string currentDirectory = "CurrentDirectory";
# endregion
/// <summary>
/// The starting directory for the application
/// </summary>
public static string StartDirectory
{
get
{
return GetSessionValue(startDirectory, true);
}
//set
//{
// HttpContext.Current.Session[startDirectory] = value;
//}
}
public static string CurrentDirectory
{
get
{
return GetSessionValue(currentDirectory, false);
}
set
{
HttpContext.Current.Session[currentDirectory] = value;
}
}
//TODO: Update to use any class or type
/// <summary>
/// Handles routine of getting values out of session and or AppSettings
/// </summary>
/// <param name="SessionVar"></param>
/// <param name="IsAppSetting"></param>
/// <returns></returns>
private static string GetSessionValue(string SessionVar, bool IsAppSetting)
{
if (null != HttpContext.Current.Session[SessionVar])
return (string)HttpContext.Current.Session[SessionVar];
else if (IsAppSetting) // Session null with appSetting value
return ConfigurationManager.AppSettings[SessionVar];
else
return "";
}
}
}