Использование сессий в моем проекте - PullRequest
0 голосов
/ 05 января 2012

Я новичок в программировании на .NET, и я пытаюсь реализовать сеансы в моем уже испорченном образце.Итак, вот детали моего примера, который я делал до сих пор.

У меня есть типы решений в моем проекте.Библиотека классов, веб-приложение и консольное приложение.

Я создал статический класс, который имеет набор свойств get /, и использовал эти свойства в качестве глобальных переменных для использования в моей библиотеке классов.Эти свойства get / set имеют смешанный набор структур данных, таких как список и словари.

Мое веб-приложение имеет только одну страницу со списком полей и кнопкой.Я использую все свойства get set из моей библиотеки классов в своем веб-приложении для хранения и извлечения данных.Теперь, когда веб-страница открывается в двух разных браузерах, данные перезаписываются от одного пользователя к другому, поскольку я использую все статические переменные и сохраняю данные в этих статических переменных.

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

Вот небольшой пример моего объяснения:

Класс XMLData в библиотеке классов имеет кучу этих свойств get / set.

public Dictionary<string, List<string>> Content
{
    get { return _testContent; }
    set { _testContent = value;}
}

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Простой способ заключается в том, что вы можете получить доступ к текущему контексту в классе в вашей библиотеке классов, используя

HttpContext.Current

на нем есть Session.

Существуют более сложные способы создания приложения, но мы начнем с самого простого:)

Для уточнения, ваша библиотека классов может объявить интерфейс для компонента, который может получить доступ к сеансу

public interface ISessionStore
{
    object Get(string key);
    void Save(string key, object value);
}

Теперь определите конкретную реализацию ISessionStore

public class HttpContextSessionStore : ISessionStore
{
    public object Get(string key)
    {
        var context = HttpContext.Current;

        if (context == null)
            throw new InvalidOperationException("this class is intended to work only within web applications");

        return context.Session(key);
    }

    public void Save(string key, object value)
    {
        var context = HttpContext.Current;

        if (context == null)
            throw new InvalidOperationException("this class is intended to work only within web applications");

        // note that this will overwrite anything already set
        // against this key in session
        context.Session[key] = value;
    }
}

Теперь вы можете программировать с использованием интерфейса ISessionStore и использовать HttpContextSessionStore в своем приложении.

Я бы рекомендовал взглянуть на шаблон MVP , если вы работаете с веб-формами или, альтернативно, взгляните на MVC framework .

0 голосов
/ 05 января 2012

В дополнение к комментариям Russ Cam выше, вы также должны проверить, что HttpContext.Current! = Null в методах в вашей библиотеке классов.Он гарантированно укусит вас за задницу, если вы начнете писать модульные тесты, или за любой код, который не выполняется в ASP.Net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...