记住子项目中的Object状态

时间:2013-08-16 20:32:01

标签: c# asp.net state business-layer

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

的引用

访客必须登录。信息保存在DB中。在我的数据库中,我有不同的配置信息,以使网站计算正确的信息。

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

之后我总是要从cookie或Session创建我的对象,并像这样调用我的Business Layer对象:
BL.CalculatePrice(UserInfo.RegionID)
BL.CalculateTotal(UserInfo.RegionID)

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

1 个答案:

答案 0 :(得分:1)

你可以使用各种各样的东西

  1. 将信息存储在会话中
  2. 进行静态收集,并在给定时间后手动处理信息
  3. 与2.相同但使用MemoryCache等过期内容,因此您不必手动处理到期日期
  4. 与3相同,但使用http缓存
  5. 以下是您可以查看的一些名称空间/想法

    1. System.Web.HttpContext.Current.Session
    2. private static Dictionary< userId,UserInfo> sessionInfo
    3. System.Runtime.Caching.MemoryCache.Default
    4. System.Web.HttpContext.Current.Cache
    5. 我个人选择MemoryCache(它是更新的,取代了httpCache),我在一个项目中使用它来实现一个半泛型类,它使用MemoryCache作为缓存层之间BLL& DAL。

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

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

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