我正在一个有两个子项目的网站上工作。子项目引用如下:
=>我的网站引用了项目业务层
=>项目业务层引用了项目数据层
访问者需要登录。这些信息保存在数据库中。在我的数据库中,我有不同的配置信息,需要这些信息才能使网站计算出正确的信息。
示例:
用户A登录到网站,配置信息存储在对象名称中:UserInfo。UserInfo类也是我的业务层的一部分。
在那之后,我总是必须从cookie或Session创建我的对象,并像这样调用我的业务层对象:BL.CalculatePrice(UserInfo.RegionID)
BL.CalculateTotal(UserInfo.RegionID)
在我的业务层项目中,是否有一种方法可以在网页更改之间保持"用户"对象的状态,而无需在每次从网站调用时发送引用(UserInfo.RegioID)?
您可以使用
- 将信息存储在会话中
- 进行静态收集,并在给定时间后手动处理信息
- 与2相同。但是使用类似MemoryCache之类的带有过期的东西,这样就不必手动处理过期
- 与3相同,但使用http缓存
以下是一些名称空间/想法,供您查看
- System.Web.HttpContext.Current.Session
- 私有静态字典<userId,用户信息>会话信息
- System.Runtime.Caching.MemoryCache.Default
- 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重要的是要设置这些以防止服务器使用过多内存