记住子项目中对象的状态



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

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

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

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

在我的业务层项目中,是否有一种方法可以在网页更改之间保持"用户"对象的状态,而无需在每次从网站调用时发送引用(UserInfo.RegioID)

您可以使用

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

以下是一些名称空间/想法,供您查看

  1. System.Web.HttpContext.Current.Session
  2. 私有静态字典<userId,用户信息>会话信息
  3. System.Runtime.Caching.MemoryCache.Default
  4. System.Web.HttpContext.Current.Cache

就我个人而言,我会选择MemoryCache(它比较新,有点取代httpCache),我在一个项目中使用它来实现一个半通用类,该类使用MemoryCache作为BLL&DAL。

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

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

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

相关内容

  • 没有找到相关文章

最新更新