代码之家  ›  专栏  ›  技术社区  ›  iXcoder

如何在ASP.net web应用程序中定义全局变量

  •  8
  • iXcoder  · 技术社区  · 14 年前

    我有个要求,

    我希望客户端访问数据中心,但不使用数据库,所以我希望我的web应用程序可以保留一个全局或应用程序会话变量,该变量包含数据,每个客户端都可以访问相同的数据。。。我试着用golabl声明,但似乎它只能存储字符串,但其他。。。

    如何解决这个问题?

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  7
  •   abatishchev Karl Johan    14 年前

    要与所有应用程序用户共享数据,可以使用ASP.NET应用程序对象。下面是访问ASP.NET中的应用程序对象的示例代码:

    Hashtable htblGlobalValues = null;
    
    if (Application["GlobalValueKey"] != null)
    {
        htblGlobalValues = Application["GlobalValueKey"] as Hashtable;
    }
    else
    {
        htblGlobalValues = new Hashtable();
    }
    
    htblGlobalValues.Add("Key1", "Value1");
    htblGlobalValues.Add("Key2", "Value2");
    
    this.Application["GlobalValueKey"] = htblGlobalValues;
    

    Application["GlobalValueKey"] 任何用户都可以在整个应用程序中的任何位置使用。它对所有应用程序用户都是通用的。

        2
  •  10
  •   Pieter van Ginkel    14 年前

    定义全局变量的另一个选项是创建具有静态属性的静态类:

    public static class GlobalVariables
    {
        public static string MyGlobalVariable { get; set; }
    }
    

    如果要将其用作数据存储,则可以使其更加复杂,但也有相同的想法。比方说,你有一个字典来存储你的全局数据,你可以这样做:

    public static class GlobalData
    {
        private static readonly object _syncRoot = new object();
        private static Dictionary<string, int> _data;
    
        public static int GetItemsByTag(string tag)
        {
            lock (_syncRoot)
            {
                if (_data == null)
                    _data = LoadItemsByTag();
    
                return _data[tag];
            }
        }
    
        private static Dictionary<string, int> LoadItemsByTag()
        {
            var result = new Dictionary<string, int>();
    
            // Load the data from e.g. an XML file into the result object.
    
            return result;
        }
    }
    
        3
  •  2
  •   Jon Seigel    14 年前

    你可以把数据塞进 Application 如果你愿意的话。它不是跨应用程序实例持久化的,但这可能就足够了。

    (我一分钟都不会建议这是一个最佳实践,但如果对需求没有更清晰的了解,我只能建议这么做。)

    http://msdn.microsoft.com/en-us/library/system.web.ui.page.application.aspx
    http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

        4
  •  0
  •   Shadow Wizard    14 年前

    你也可以使用 Cache ,它具有设置过期时间/日期的功能。