如何在asp.net项目的不同层之间共享会话对象

本文关键字:之间 共享 对象 会话 asp net 项目 | 更新日期: 2023-09-27 18:02:00

我在应用程序启动时创建了一个List对象,并将它们保存为会话变量。

然后在应用程序的整个生命周期中使用这个会话变量。

有时我在应用程序的其他层更新这个列表,所以我想把这个会话变量传递给其他层。

我应该传递列表对象从asp.net到其他层的方法?我应该在所有将要使用这个对象的图层中创建List属性并从表示层设置属性吗?如果我创建一个静态列表,那么所有用户都会看到相同的列表。我希望列表是会话特定的

如何在asp.net项目的不同层之间共享会话对象

不要向数据层或其他业务逻辑发送会话对象。将这些东西分离出来的一个主要原因是,您可以在其他程序中重用这些代码。

一旦你添加了依赖项,比如HttpContext,那么你最好不要这些层,只是把它们都扔在一起。

关于列表本身,当您需要将数据传递给业务/数据层时,将其作为列表发送。

最后,我建议除非该列表在大量页面上使用,否则不要将其放在会话中,而是在需要时从数据库中提取数据。会话数据必须在每次页面访问时进行序列化和反序列化。这增加了处理开销。如果你的应用处于负载平衡的环境中,情况会变得更糟,因为无论是否使用,会话数据都必须通过网络推送和拉出每个页面访问。无论如何,这巧妙地消除了在会话中使用它的任何理由。

然而,如果数据在大多数地方使用,那么我真的很好奇它是什么。会话不应该被用作一堆对象的倾倒场。我真的希望你不要试图存储像数据集,命令对象之类的东西

我会编写应用程序的其他层来接受和返回对象列表,他们不应该知道或关心列表在他们完成后被存储

我永远不会在数据访问层或业务层使用会话变量。这就像是违背了设计。我宁愿在数据访问层或业务层的函数参数中传递会话变量的值,该参数打算使用该会话变量

您的Session变量可以使用以下代码:

HttpContext.Current.Session[....]

所以,你需要创建一个额外的适当的只是为了减少代码