Asp.net 特定于页面生命周期的全局变量

本文关键字:周期 全局变量 生命 于页面 net Asp | 更新日期: 2024-10-25 06:32:30

当然,这一定是一个常见问题,但我找不到一个简单的方法来做到这一点。

有没有办法在 asp.net Web 表单的生命周期中共享全局变量(例如实例化成本高昂的类),而不必将句柄传递给页面的每个组件?

如果我只创建一个静态变量,应用程序域中的所有线程都可以访问它(问题:我的类不是线程安全的),并且很难确保每个页面都在最近的副本上工作(我想在页面生命周期的每一步缓存类, 但是每次调用新页面时我都想要一个新实例)。

另一种方法是通过页面中的每个控件传递句柄,但在母版页、页面本身和所有用户控件之间,它会使代码变得非常毛茸茸的。

我想知道是否有一个优雅的解决方案将类存储在某个地方,该类只能由执行此特定页面的线程(包括所有子用户控件)访问?

欢迎任何建议!谢谢查尔斯

Asp.net 特定于页面生命周期的全局变量

有一个简单的答案:Items 容器。它在单个请求的生存期内可用,然后自动销毁。您可以将其包装在属性中以拥有所需的内容:

 public class Foo {
   const string SOMEKEY = "_somekey";
   public static string SingleRequestVariable
   {
      get
      {
          return (string)HttpContext.Current.Items[SOMEKEY];   
      }
      set
      {
          HttpContext.Current.Items.Add( SOMEKEY, value );
      }
   }
 }

然后

Foo.SingleRequestVariable = "bar"; // somewhere
...
string val = Foo.SingleRequestVariable; // yet somewhere else