Просто подумал, что поделюсь тем, как я использую сессию в своем приложении.Мне действительно нравится эта реализация ( Предложения по доступу к данным ASP.NET MVC Session [] в контроллерах и методах расширения? ) использования сеанса, поскольку она позволяет легко менять сеанс для другого хранилища или для целей тестирования.
Глядя на реализацию, она напомнила мне ObjectStore, который я использовал в других проектах для сериализации объектов в двоичном или XML-формате и хранения в базе данных или в файловой системе.
Поэтому я упростил свой интерфейс(ранее T должен был быть классом) и придумал следующее:
public interface IObjectStore {
void Delete(string key);
T Get<T>(string key);
void Store<T>(string key, T value);
IList<T> GetList<T>(string key);
}
И моя реализация хранилища сеансов:
public class SessionStore : IObjectStore
{
public void Delete(string key) {
HttpContext.Current.Session.Remove(key);
}
public T Get<T>(string key) {
return (T)HttpContext.Current.Session[key];
}
public void Store<T>(string key, T value) {
HttpContext.Current.Session[key] = value;
}
public IList<T> GetList<T>(string key) {
throw new NotImplementedException();
}
}
Затем я беру IObjectStore в моем базовом контроллереконструктор и может затем использовать его, чтобы выставить свойства другим контроллерам:
public string CurrentCustomer {
get {
string currentCustomer =
sessionStore.Get<string>(SessionKeys.CustomerSessionKey);
if (currentCustomer == null) {
currentCustomer = Guid.NewGuid().ToString();
sessionStore.Store<string>(SessionKeys.CustomerSessionKey, currentCustomer);
}
return currentCustomer;
}
}
Я очень доволен этим подходом.