用 Application 的话很方便,但是其中的键值要像全局变量一样管理,颇为费心。
如果要共享的变量很多的话,最好新建一个类库,在里面建一些单件类,用来保存需共享的信息。

解决方案 »

  1.   

    Eddie005(暴走005)
    不错,这是一个很好的建议。
    不过为了方便一些,写XML文档似乎更好一些。这样在版本控制上比上一个方便些。
      

  2.   

    To  Eddie005(暴走005) & tianjh(苍穹彗星) :    谢谢你们的思路,这种公共信息类我肯定有了,问题是这些公共信息在项目中的存储和调用就颇费心思。
        进一步解释,我的所有的信息都是保存在数据里面,只要我的project 启动之后,一旦需要访问公共信息,第一次肯定要访问数据库,于是我就将它存储到一个application 或者
    cache 中,这样,下一次在访问,我就直接读取我要的信息就可以了
      

  3.   

    /// <summary>
    /// 通过strCode,获得所对应的信息。
    /// </summary>
    /// <param name="strCode"></param>
    /// <returns></returns>
    public string GetMessage(string strCode)
    {
    try
    {
    DsErrMsg.TErrMsgRow drwErrMsg; //声明一个错误的行
    DsErrMsg dsErrMsg = new DsErrMsg(); //声明并实例化一个DataSet //TODO:CACHE
    if (Cache["dsErrMsg"] == null)
    {
    GetDatasetErrMsg();
    }
    dsErrMsg = (DsErrMsg)Cache["dsErrMsg"];
    drwErrMsg = (DsErrMsg.TErrMsgRow)dsErrMsg.TErrMsg.Select("sCode='" + strCode + "'")[0];
    if (drwErrMsg != null)
    {
    return drwErrMsg.sInformation.ToString();
    }
    else
    {
    return null;
    }
    }
    catch (Exception ex)
    {
    ExceptionData.InsertException(ex.Message);
    return null;
    }}
    DsErrMsg GetDatasetErrMsg()
    {
    DsErrMsg dsErrMsg = new DsErrMsg();
    //......
    //从数据库得到数据填充 dsErrMsg
    Cache["dsErrMsg"] = dsErrMsg;
    }我把代码贴出来主要部分,但是发现编译可以通过,运行时候抛出异常"Cache is not available"
      

  4.   

    public static string GetFromWebConfig(string p_ValueName , string p_Default)
            {
                string szValue;
                string msg;
                object obj;                                     //可能这里因为没有缓存    
                try
                {
                    if(HttpContext.Current != null)
                    {
                        obj = HttpContext.Current.Cache.Get(p_ValueName);
                        if( obj == null)
                        {
                            HttpContext.Current.Cache.Insert(p_ValueName,"");
                            szValue = "";
                        }
                        else
                        {
                            szValue = obj.ToString();
                        }
                    
                        if(szValue != "" && szValue != null)
                            return szValue;
                    }
                    szValue = ConfigurationSettings.AppSettings[p_ValueName];
                    //如果没有得到数据的话,那么使用默认的值            
                    if( szValue == "" || szValue == null )
                    {
                        szValue = p_Default;
                    }                if( HttpContext.Current != null)
                    {
                        //将数据进行保存到高速缓冲,以提高速度
                        HttpContext.Current.Cache[p_ValueName] = szValue;
                    }
                }
                catch(Exception ee)
                {
                    msg = ee.Message;
                    szValue = p_Default;
                }
                return szValue;
            }
    }
    看看这个怎么样,我是新手,是前辈的代码里有这个东西,不知道是不是你想要的东西
      

  5.   

    上面的例子很有帮助,我知道我引用cache 得问题出在那里了:cache 在好几个命名空间下面都有,在我的page 里面,默认成了 system.web.cache,
    其实,这是不对的。