如何保存Session BLL's变量

本文关键字:变量 BLL Session 何保存 保存 | 更新日期: 2023-09-27 18:09:09

我写了一个asp.net网站。我有一个BLL项目(意思是dll类型的项目)其中我想保存一些数据为静态的会话

我该怎么做?如果我将它们声明为静态,它们对于应用程序来说将是静态的。是否有一种方法可以避免将它们保存在asp.net会话字典中(我不想给网站增加负担,毕竟它在BLL中)。

TIA

如何保存Session BLL's变量

会话是存储这些数据的正确位置。

要在BLL中使用它,您可以从会话中抽象并创建某种类型的UserStore,它隐藏了实现。这可以通过DI注入,可能使用IoC容器。

更简单的方法是在构造BLL对象或调用该方法时传递对当前HttpContext或会话的引用。理想情况下,您应该使用抽象库来保持其可测试性。

可以使用HttpContext.Current.Session属性

为什么不创建一个业务对象来保存该数据并将其分配给会话呢?

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 );

以一种可以为每个用户会话创建某个业务入口对象(业务facade)的实例的方式重构您的BLL怎么样?

使用这种方法,您不需要静态数据。您可以将数据保存在类字段/属性中。

您将在ASP. net中每个会话存储一个实例。. NET会话,你的BLL根本不知道会话

这里有一篇不错的文章:快速、可扩展和安全的Web应用程序会话状态管理

优化序列化(来自上面链接的文章)

在设计会话对象模型时,避免存储对象类型在会议上。相反,只在会话中存储基本类型字典,并在每个会话上重新构建业务层会话对象基于会话数据的请求。这避免了使用的开销BinaryFormatter .