如果大家从官方下载2.0正式版的DLL程序集中会从里面找到discuz.config这个DLL文件。通过b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
reflector 反射加载这个程序集后,后从中找到一些从类名称上非常相似且有一定规律(格式)的类。b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
它们是:
    全局配置类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    GeneralConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    GeneralConfigInfo.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    GeneralConfigs.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    Emial配置b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    EmailConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    EmailConfigInfo.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    EmailConfigs.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    基本配置类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    BaseConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    BaseConfigInfo.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    BaseConfigInfoCollection.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    BaseConfigs.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    相册配置类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AlbumConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AlbumConfigInfo.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AlbumConfigs.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    聚合配置类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AggregationConfig.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AggregationConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    AggregationConfigInfo.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    空间开通配置类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    SpaceActiveConfigs.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    SpaceActiveConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    SpaceActiveConfigInfo.cs.cs
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    可以看到,这些类基本上是以三个一组,共六组。而这六组类中的...FileManager.cs与Defau-b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
ltConfigFileManager.cs的关系如下图所示:b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
      从类图上看,DefaultConfigFileManager.cs是基类,而GeneralConfigFileManager.csEmai-b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
lConfigFileManager.cs
BaseConfigFileManager.csAlbumConfigFileManager.csAggregatio-b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
nConfigFileManager.cs
, SpaceActiveConfigFileManager.cs分别派生自DefaultConfigFileManager。b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
而DefaultConfigFileManager本身也定义了几个属性和方法以便于子类调用或重写(如SaveConfig)。b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
而DefaultConfigFileManager的定义如下:
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  1    /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  2    /// 文件配置管理基类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  3    /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  4    public class DefaultConfigFileManagerb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  5    {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  6        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  7        /// 文件所在路径变量b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  8        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  9        private static string m_configfilepath;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
10b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
11        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
12        /// 临时配置对象变量b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
13        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
14        private static IConfigInfo m_configinfo = null;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
15b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
16        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
17        /// 锁对象b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
18        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
19        private static object m_lockHelper = new object();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
20        b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
21b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
22        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
23        /// 文件所在路径b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
24        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
25        public static string ConfigFilePathb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
26        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
27            get { return m_configfilepath; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
28            set { m_configfilepath = value; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
29        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
30b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
31      b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
32        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
33        /// 临时配置对象b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
34        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
35        public static IConfigInfo ConfigInfob!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
36        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
37            get { return m_configinfo; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
38            set { m_configinfo = value; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
39        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
40            b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
41        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
42        /// 加载(反序列化)指定对象类型的配置对象b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
43        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
44        /// <param name="fileoldchange">文件加载时间</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
45        /// <param name="configFilePath">配置文件所在路径</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
46        /// <param name="configinfo">相应的变量 注:该参数主要用于设置m_configinfo变量和获取类型.GetType()</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
47        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
48        protected static IConfigInfo LoadConfig(ref DateTime fileoldchange, string configFilePath, IConfigInfo configinfo)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
49        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
50            return LoadConfig(ref fileoldchange, configFilePath, configinfo, true);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
51        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
52b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
53b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
54        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
55        /// 加载(反序列化)指定对象类型的配置对象b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
56        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
57        /// <param name="fileoldchange">文件加载时间</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
58        /// <param name="configFilePath">配置文件所在路径(包括文件名)</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
59        /// <param name="configinfo">相应的变量 注:该参数主要用于设置m_configinfo变量 和 获取类型.GetType()</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
60        /// <param name="checkTime">是否检查并更新传递进来的"文件加载时间"变量</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
61        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
62        protected static IConfigInfo LoadConfig(ref DateTime fileoldchange, string configFilePath, IConfigInfo configinfo, bool checkTime)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
63        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
64            m_configfilepath = configFilePath;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
65            m_configinfo = configinfo;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
66b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
67            if (checkTime)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
68            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
69                DateTime m_filenewchange = System.IO.File.GetLastWriteTime(configFilePath);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
70b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
71                //当程序运行中config文件发生变化时则对config重新赋值b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
72                if (fileoldchange != m_filenewchange)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
73                {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
74                    fileoldchange = m_filenewchange;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
75                    lock (m_lockHelper)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
76                    {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
77                        m_configinfo = DeserializeInfo(configFilePath, configinfo.GetType());b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
78                    }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
79                }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
80            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
81            elseb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
82            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
83                lock (m_lockHelper)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
84                {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
85                    m_configinfo = DeserializeInfo(configFilePath, configinfo.GetType());b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
86                }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
87                b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
88            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
89        b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
90b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
91            return m_configinfo;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
92        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
93b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
94b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
95        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
96        /// 反序列化指定的类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
97        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
98        /// <param name="configfilepath">config 文件的路径</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
99        /// <param name="configtype">相应的类型</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
100        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
101        public static IConfigInfo DeserializeInfo(string configfilepath, Type configtype)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
102        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
103b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
104            IConfigInfo iconfiginfo;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
105            FileStream fs = null;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
106            tryb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
107            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
108                fs = new FileStream(configfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
109                XmlSerializer serializer = new XmlSerializer(configtype);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
110                iconfiginfo = (IConfigInfo)serializer.Deserialize(fs);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
111            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
112            catch (Exception ex)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
113            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
114                throw ex;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
115            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
116            finallyb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
117            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
118                if (fs != null)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
119                {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
120                    fs.Close();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
121                }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
122            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
123b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
124            return iconfiginfo;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
125        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
126b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
127b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
128        public virtual bool SaveConfig()b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
129        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
130            return true;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
131        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
132b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
133        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
134        /// 保存(序列化)指定路径下的配置文件b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
135        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
136        /// <param name="configFilePath">指定的配置文件所在的路径(包括文件名)</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
137        /// <param name="configinfo">被保存(序列化)的对象</param>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
138        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
139        public bool SaveConfig(string configFilePath, IConfigInfo configinfo)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
140        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
141            bool succeed = false;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
142            FileStream fs = null;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
143            tryb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
144            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
145                fs = new FileStream(configFilePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
146                XmlSerializer serializer = new XmlSerializer(configinfo.GetType());b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
147                serializer.Serialize(fs, configinfo);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
148                //成功则将会返回trueb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
149                succeed = true;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
150            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
151            catch (Exception ex)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
152            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
153                throw ex;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
154            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
155            finallyb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
156            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
157                if (fs != null)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
158                {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
159                    fs.Close();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
160                }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
161            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
162b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
163            return succeed;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
164        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
165    }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
166b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
167
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    如果您一直关注我们的这个产品,就会从中发现在1.0正式版时,这些类(或实现这些功能的类)b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
还是零星分面在discuz.forum和discuz.forumpage(2.0正式版改名为discuz.web.dll)等几个DLL文件b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
中。后来因为考虑软件架构和出于统一配置管理的需求,产品小组将这些类重构到了discuz.config,b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
从此这些类有了一个“新家”。
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    为了便于开发和统一接口调用,我们又创建了两个接口类,就是IConfigFileManager.cs,ICon-b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
figInfo.cs,它们的声明如下(相关说明见注释):
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    IConfigFileManager.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
1    /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
2    /// Discuz!NT 配置管理类接口b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
3    /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
4    public interface IConfigFileManagerb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
5    {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
6        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
7        /// 加载配置文件b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
8        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
9        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
10        IConfigInfo LoadConfig();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
11b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
12b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
13        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
14        /// 保存配置文件b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
15        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
16        /// <returns></returns>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
17        bool SaveConfig();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
18    }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
19b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
20
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    IConfigInfo.csb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
  b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
1    /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
2    /// Discuz!NT 配置信息类接口b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
3    /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
4    public interface IConfigInfob!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
5    {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
6    }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
7
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    大家可以看到,其中的 IConfigInfo接口没有任何属性和方法,是一个“空接口”,这主要是为b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
了提供统一的向上转型需要。当然,如果以后有需要还是会添加一些方法和属性的。b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    为了减少篇幅,下面只对其中的 GeneralConfig进行相应介绍,一是因为它是核心的配置类,有b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
关它的使用在项目中不胜枚举。另外它也是这个项目中比较标准的“宝贝”,从一开始,只要有新的b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
功能往往都会对这个配置类有所“关照”。下面就是通过反射后得到的代码,相关的说明见注释即可:
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    论坛全局配置管理类(GeneralConfigFileManager):b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
    b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
1    /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
2    /// 全局配置设置管理类b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
3    /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
4    class GeneralConfigFileManager : Discuz.Config.DefaultConfigFileManagerb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
5    {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
6        private static GeneralConfigInfo m_configinfo;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
7b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
8      b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
9        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
10        /// 文件修改时间b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
11        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
12        private static DateTime m_fileoldchange;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
13b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
14b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
15        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
16        /// 初始化文件修改时间和对象实例b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
17        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
18        static GeneralConfigFileManager()b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
19        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
20            m_fileoldchange = System.IO.File.GetLastWriteTime(ConfigFilePath);b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
21b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
22            tryb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
23            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
24                m_configinfo = (GeneralConfigInfo)DefaultConfigFileManager.DeserializeInfo(ConfigFilePath, typeof(GeneralConfigInfo));b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
25            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
26            catchb!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
27            {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
28                if (File.Exists(ConfigFilePath))b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
29                {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
30                    ReviseConfig();b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
31                    m_configinfo = (GeneralConfigInfo)DefaultConfigFileManager.DeserializeInfo(ConfigFilePath, typeof(GeneralConfigInfo));b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
32                }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
33            }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
34        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
35b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
36        public new static IConfigInfo ConfigInfob!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
37        {b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
38            get { return m_configinfo; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
39            set { m_configinfo = (GeneralConfigInfo) value; }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
40        }b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
41b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
42        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
43        /// 配置文件所在路径b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
44        /// </summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
45        public static string filename = null;b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
46b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
47b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
48        /// <summary>b!,á¸êv8www.netcsharp.cnÆ љ¬¡é>
49        /// 获取配置文件所在路径b