Как сохранить переменные сессии BLL? - PullRequest
1 голос
/ 20 сентября 2011

Я написал сайт asp.net. У меня есть проект BLL (имеется в виду проект типа DLL) в котором я хочу сохранить некоторые данные, чтобы быть статичными для сеанса .

как я могу это сделать? Если я объявлю их статическими, они будут статическими для приложения . Есть ли способ избежать сохранения их в словаре сессии asp.net (я не хочу обременять сайт, в конце концов, он в BLL).

ТИА

Ответы [ 5 ]

2 голосов
/ 20 сентября 2011

Сессия является правильным местом для хранения этих данных.

Чтобы использовать его в BLL, вы можете абстрагироваться от сеанса и создать какой-либо UserStore, который скрывает реализацию.Это может быть введено через DI, возможно, с использованием контейнера IoC.

Более простой подход заключается в передаче ссылки на текущий HttpContext или сеанс либо при создании объекта BLL, либо при вызове метода.В идеале вы должны использовать библиотеку abstractions , чтобы обеспечить ее тестируемость.

1 голос
/ 20 сентября 2011

Как насчет рефакторинга вашего BLL таким образом, чтобы вы могли создать один экземпляр какого-либо бизнес-объекта (бизнес-фасада) за сеанс пользователя?

При таком подходе вам не нужны статические данные.Вы можете сохранить свои данные в полях / свойствах класса.

Вы будете хранить один экземпляр на сеанс в сеансе ASP.NET, и ваш BLL вообще не будет знать о сеансах.

1 голос
/ 20 сентября 2011

Почему бы не создать бизнес-объект для хранения этих данных и присвоения сеансу?

public class UserSettings 
{
    public string Name { get; set; }
    public string Company { get; set; }
    public int UserId { get; set; }
    public int CompanyId { get; set; }
}

// Assign
HttpContext.Current.Session["UserSettings"] = 
    new UserSettings() {
        UserName = "Bruno Alexandre",
        UserId = 123,
        Company = "StackOverflow Inc.",
        CompanyId = 321
    };

// retrieval: check for nulls
UserSettings userSettings = 
    HttpContext.Current.Session["UserSettings"] == null ? null : (UserSettings)HttpContext.Current.Session["UserSettings"];

...

Save( DateTime.UtcNow, userSettings.UserId );
1 голос
/ 20 сентября 2011

Вы можете использовать HttpContext.Current.Session свойство.

0 голосов
/ 20 сентября 2011

Вот хорошая статья для этого: Быстрое, масштабируемое и безопасное управление состоянием сеанса для ваших веб-приложений

Оптимизация сериализации (из статьи, указанной выше)

...

При проектировании объектной модели сеанса избегайте хранения типов объектов. в сессии. Вместо этого, хранить только примитивные типы в сеансе словарь и перестроить ваши объекты сеанса бизнес-уровня на каждом запрос на основе данных сеанса. Это позволяет избежать накладных расходов на использование BinaryFormatter.

...

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