Создание обёртки для 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", но это означало бы, что я могу хранить только один объект в менеджере сессий, верно?
Обратная связь, пожалуйста.:)