1

我正在一个有 2 个子项目的网站上工作。子项目的引用如下:
=> 我的网站引用了项目业务层
=> 项目业务层引用了项目数据层

访问者需要登录。信息保存在数据库中。在我的数据库中,我有不同的配置信息需要让网站计算正确的信息。

示例:
用户 A 登录网站,配置信息存储在对象名称:UserInfo中。UserInfo 类也是我的业务层的一部分。

之后,我总是必须从 cookie 或 Session 创建我的对象,并像这样调用我的业务层对象:
BL.CalculatePrice(UserInfo.RegionID)
BL.CalculateTotal(UserInfo.RegionID)

有没有办法在我的业务层项目中在网页更改之间保持“用户”对象的状态,而无需从网站的每次调用 中发送参考(UserInfo.RegionID) ?

4

1 回答 1

1

你可以使用各种东西

  1. 将信息存储在会话中
  2. 进行静态收集,并在给定时间后手动处理信息
  3. 与 2 相同。但使用 MemoryCache 之类的具有过期时间的东西,因此您不必手动处理过期时间
  4. 与 3 相同,但使用 http 缓存

这里有一些命名空间/想法供您查看

  1. System.Web.HttpContext.Current.Session
  2. 私有静态 Dictionary<userId, UserInfo> sessionInfo
  3. System.Runtime.Caching.MemoryCache.Default
  4. System.Web.HttpContext.Current.Cache

就我个人而言,我会选择 MemoryCache(它较新,并且有点取代 httpCache),我在一个项目中使用它来实现一个半通用类,该类使用 MemoryCache 作为 BLL 和 DAL 之间的缓存层。

或静态字典:创建 UserInfo,将其放入字典中,再次获取它,更新一个值,然后将其删除(与内置缓存版本相同的场景)。

MemoryCache/Dictionary 的优点是它们不需要对 HttpContext 的引用,因此可以在 Web 上下文之外使用。但这并不意味着您不能使用 HttpContext 代替(它更容易)。您只需要权衡在 dal/bll 中使用它的利弊。

对于 MemoryCache,请务必查看: http: //msdn.microsoft.com/en-us/library/dd941875.aspx 设置这些以防止服务器使用过多内存很重要

于 2013-08-18T08:29:23.697 回答