请高手帮一下,应该怎么设计才正确.我想做成这样.网站一起动就会有一个全局的静态SiteConfiguration对象,而且这个类的对象是唯一的,他会被存入cache。这里不是要用单态吗?应该怎么定义????
还有就是这个对象是自动建立的。不用我每个页面都要写代码去检查cache里是否有这个对象,没有他就会自动重新初始化。
我看了点asp.net forum 的代码,不过他是从XML文件读取站点设置。我是全部从数据库读取。初学者,请高手帮个忙,谢谢。下面是代码
public Class SiteConfiguration
{
public SiteConfiguration(SqlDataReader reader)
{
        //读取reader     
         ......
       .......
        //把config 存入缓存
}
}
public class SqlDataProvider
{
public SiteConfiguration LoadSiteSettings() {
using( SqlConnection connection = GetSqlConnection() ) { SqlCommand command = new SqlCommand("SiteSettings_Get", connection);
SqlDataReader reader;
......
connection.Open(); reader = command.ExecuteReader(); if(reader.read()){
                   SiteConfiguration config=new SiteConfiguration (reader)
return config;
}
                  else
                  {
                   throw new Expection()
                    }
        }
}

解决方案 »

  1.   

    将构造函数设为私有的,用个静态方法生成对象,在方法里检测有无对象,有就返回对象,没有就生成对象;网站有一个全局的静态对象要在Global.asax里生成对象。具体的看看资料
      

  2.   

    用Google搜索"C#+Singleton+模式",你就能看到结果。
      

  3.   

    public class SiteConfiguration
    {
    // 单例类,构造函数私有
    private SiteConfiguration()
    {
    } public static SiteConfiguration Instance
    {
    get
    {
    SiteConfiguration sc =  HttpRuntime.Cache.Get("SiteConfiguration") as SiteConfiguration;
    if(sc == null)
    {
    sc = new SiteConfiguration();
    HttpRuntime.Cache.Add("SiteConfiguration", sc, null, DateTime.Now, TimeSpan.FromDays(1), System.Web.Caching.CacheItemPriority.Normal, null);
    }
    return sc;
    }
    }
    }
      

  4.   

    public Class SiteConfiguration
    {
    public SiteConfiguration(SqlDataReader reader)
    {
            //读取reader     
             ......
           .......
            //把config 存入缓存
    }
    }
    public class SqlDataProvider
    {
    public SiteConfiguration LoadSiteSettings() {
    using( SqlConnection connection = GetSqlConnection() ) {SqlCommand command = new SqlCommand("SiteSettings_Get", connection);
    SqlDataReader reader;
    ......
    connection.Open();reader = command.ExecuteReader();if(reader.read()){
                       SiteConfiguration config=new SiteConfiguration (reader)
    return config;
    }
                      else
                      {
                       throw new Expection()
                        }
            }
    }