2010-08-14 1 views
3

У меня есть проект ASP.Net, который использует состояние сеанса, я хотел бы быть немного более строгим относительно того, как мы обращаемся к состоянию сеанса, я не доволен всеми строками, плавающими вокруг кода. Мне также нужно знать, когда определенное значение хранится/обновляется в состоянии сеанса для отслеживания последнего значения этого объекта.Каков предпочтительный способ переноса состояния сеанса в ASP.Net?

Проблема с строкой легко решить с помощью констант, но это не помогает отслеживанию. Инкапсуляция их всех в одном классе привлекательный, но тогда я должен передать объект сеанса этого классу, и это кажется немного грязным

Я имею в виду, используя один из двух вариантов:

  1. Удлинители методы получения и установки на объекте сеанса
  2. метод расширения объекта сеанса, чтобы вернуть класс с добытчиками и сеттеров

Первый дает мне синтаксис:

var thing = Session.GetThing(); 
Session.SetThing(thing); 

Второй дает:

var thing = Session.Wrapper().Thing; 
Session.Wrapper().Thing = thing; 

Оба имеют свою привлекательность, хотя я склоняюсь ко второму. В идеальном мире я хотел бы иметь возможность сделать это:

var thing = Session.Thing(); // easy to do 
Session.Thing() = thing; // don't think it's possible 

Каков предпочтительный способ обработки этого? Любой из них, иначе, или я просто делаю это неправильно?

ответ

3

Вы не должны пройти сеанс для каждого класса, вы можете иметь:

public class State 
{ 
    public string Something 
    { 
     get { return HttpContext.Current.Session["Something"] as string; } 
     set { HttpContext.Current.Session["Something"] = value; } 
    } 
} 

Это, я считаю, это типичный подход. HttpContext имеет свойство Current, которое статически доступно.

+0

Спасибо, я уже думал об этом. Я должен был искать, как получить доступ к состоянию сеанса из другого места, а не пытаться расширить объект HttpSessionState. – baralong

1

Мой предпочтительный метод состоит в том, чтобы поместить все переменные, которым необходим доступ к объекту. Затем я помещаю переменную в базовый класс нашей страницы, которая обеспечивает соответствующий доступ к объекту в сеансе. Единственный способ истинного применения этого заключается в предоставлении стандарта, который требует использования этого объекта, а затем проверки кода/эксперта, чтобы гарантировать, что разные строки/переменные не завершают сеанс.

+0

не совсем то, чем я был, поскольку у меня есть некоторые места, в которых мне нужно получить доступ к этим элементам управления, а иногда и к веб-службам. – baralong

+0

@baralong - На самом деле наша структура учитывает все это. Из любого элемента управления в архитектуре вы можете добраться до объекта сеанса с помощью наших свойств и методов специально для этой цели. Я бы сказал, что это действительно все, как вы планируете все. –

Смежные вопросы