繁体   English   中英

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

[英]Asp.net page lifecycle-specific global variable?

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

有没有办法在asp.net webform的生命周期中共享一个全局变量(比如一个实例化代价很高的类),而不必将句柄传递给页面的每个组件?

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

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

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

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

有一个简单的答案: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM