Как создать оболочку объекта сеанса C #? - PullRequest
4 голосов
/ 24 февраля 2010

Как мне создать библиотеку классов, где я могу получить и установить, как объект IIS Session, где я использую var x = objectname("key") для получения значения или objectname("key") = x для установки значения?

Ответы [ 3 ]

10 голосов
/ 24 февраля 2010

Обычно у меня просто есть статический класс, который упаковывает мои данные сеанса и делает его тип безопасным, например:

public static class MySessionHelper
{
    public static string CustomItem1
    {
        get { return HttpContext.Current.Session["CustomItem1"] as string; }
        set { HttpContext.Current.Session["CustomItem1"] = value; }
    }

    public static int CustomItem2
    {
        get { return (int)(HttpContext.Current.Session["CustomItem2"]); }
        set { HttpContext.Current.Session["CustomItem2"] = value; }
    }

    // etc...
}

Тогда, когда мне нужно получить или установить предмет, вы просто сделаете следующее:

// Set
MySessionHelper.CustomItem1 = "Hello";

// Get
string test = MySessionHelper.CustomItem1;

Это то, что вы искали?

РЕДАКТИРОВАТЬ: В соответствии с моим комментарием на ваш вопрос, вы не должны получать доступ к сессии непосредственно со страниц в вашем приложении. Класс-обёртка сделает не только безопасный тип доступа, но и даст вам центральную точку для всех изменений. С вашим приложением, использующим оболочку, вы можете в любой момент легко заменить Session на хранилище данных по вашему выбору, не внося изменений в каждую страницу, которая использует сеанс.

Еще одна вещь, которая мне нравится в использовании класса-оболочки, это то, что он документирует все данные, которые хранятся в сеансе. Следующий программист может увидеть все, что хранится в сеансе, просто взглянув на класс-оболочку, чтобы у вас было меньше шансов сохранить одни и те же данные несколько раз или повторно загрузить данные, которые уже кэшированы в сеансе.

5 голосов
/ 24 февраля 2010

Полагаю, вы можете использовать общий словарь типа Dictionary<string, Object> или что-то подобное для достижения этого эффекта. Вам потребуется написать некоторый код-обертку, чтобы добавить объект при доступе к несуществующему элементу, например, с помощью настраиваемого свойства по умолчанию в оболочке.

2 голосов
/ 24 февраля 2010

Вы можете использовать что-то вроде этого

public class Session
{
    private static Dictionary<string, object> _instance = new Dictionary<string, object>();
    private Session()
    {            
    }

    public static Dictionary<string, object> Instance
    {
        get
        {
           if(_instance == null)
           {
               _instance = new Dictionary<string, object>();
           }
            return _instance;
        }
    }
}

И используйте это так

Session.Instance["key"] = "Hello World";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...