Создание обёртки для HttpContext

По сути, я пытаюсь создать класс SessionManager, который я могу использовать для управления сессиями в моих приложениях MVC. Для этого я думаю, что лучший способ сделать это - создать класс-оболочку для HttpContext, который затем позволил бы мне получить доступ к HttpContext.Current.Session.

Если честно, я не совсем уверен во всем этом, я просто чувствую, что это логичный способ сделать это. Я также хочу создать интерфейсы ISessionManager и ISession, а затем реализовать их в соответствии с потребностями моего приложения. Для моего текущего проекта и на данный момент мне нужно управление сессиями InProc, но мне может потребоваться сохранить данные сессий на MSSQL Server, когда мы решим расширить и использовать веб-ферму или сад. Вот почему я пытаюсь создать своего рода расширяемую структуру с самого начала.

Последнее замечание: я буду использовать Microsoft Unity для внедрения конкретного SessionManager по своему выбору. Я считаю, что это хороший способ поддерживать определенный уровень абстракции.

Любые предложения для достижения всего этого?

Заранее спасибо!:)

1 ответ

Решение

Хорошо, вот что я придумала, но я не уверена, что это правильный способ сделать это, поэтому ваше мнение приветствуется!

ISessionManager:

public interface ISessionManager  
{      
    void RegisterSession(string key, object obj);       
    void FreeSession(string key);   
}

SessionManager:

public class SessionManager : ISessionManager
{
    private IDictionary<string, object> sessionDictionary;

    public SessionManager(IDictionary<string, object> _sessionDictionary)
    {
        sessionDictionary = _sessionDictionary;
    }

    public IDictionary<string, object> Session
    {
        get
        {
            return sessionDictionary;
        }
    }

    public void RegisterSession(string key, object obj)
    {
        sessionDictionary[key] = obj;
    }

    public void FreeSession(string key)
    {
        sessionDictionary[key] = null;
    }
}

Затем, когда я хочу создать экземпляр класса (внутри моего веб-приложения), я бы сделал что-то вроде этого:

var sessionManager = new SessionManager(HttpContext.Current.Session);
sessionManager.RegisterSession["myKey"] = someObject;

Но я бы предпочел не использовать магические строки в качестве ключа. Я мог бы включить в класс постоянное строковое свойство, например sessionKey = "myKey", но это означало бы, что я могу хранить только один объект в менеджере сессий, верно?

Обратная связь, пожалуйста.:)

Другие вопросы по тегам