快速业务通道

.Net网站的独立配置文件读写解决方案

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-03


        
private static SiteSettings _currentConfiguration;
        
#endregion

        
#region Constructor
        
private SiteSettings()
        {
        }
        
#endregion

        
public static SiteSettings Instance
        {
            
get
            {
                
if (_currentConfiguration == null)
                {
                    Load();
                    
if (_currentConfiguration == null)
                        _currentConfiguration 
= new SiteSettings();
                }

                
return _currentConfiguration;
            }
        }

        
private static void Load()
        {

            
if (!File.Exists(_configurationFilePath))
            {
                
throw new Exception("Can''t locate config file! Check the config file path.");
                _currentConfiguration 
= new SiteSettings();
            }
            
else
            {
                XmlSerializer ser 
= new XmlSerializer(typeof(SiteSettings));
                StreamReader reader 
= new StreamReader(_configurationFilePath);


                
// XML反序列化.
                _currentConfiguration = (SiteSettings)ser.Deserialize(reader);

                reader.Close();

            }

        }

        
private static void Load(string configFile)//这个方法如果改为公开方案那么可以在运行时来读取合适的配置文件,这样就避免在布署时修改多个功能项.
        {
            _configurationFilePath 
= configFile;
            Load();
        }

        
public static void Save()
        {
            XmlSerializer ser 
= new XmlSerializer(typeof(SiteSettings));
            FileStream fileOut;


            
if (!File.Exists(_configurationFilePath))
            {
                fileOut 
= new FileStream(_configurationFilePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite);
            }
            
else
            {
                fileOut 
= new FileStream(_configurationFilePath, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite);
            }


            
// Serialize the object in XML to the given file stream.
            ser.Serialize(fileOut, _currentConfiguration);

            
// Close the file stream.
            fileOut.Close();
        }
        
private static string GetBaseDirectory()
        {
            
return System.AppDomain.CurrentDomain.BaseDirectory;
        }
        
#endregion
    }
}
这样我们在站点根目录下面建立一个名为"GBSettings.config"的配置文件就可以对它进行读写操作了.

它里面的内容:
<?xml version="1.0"?>
<SiteSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <AbsoluteWebRoot>Http://Localhost/</AbsoluteWebRoot>
    <RelativeWebRoot>GBWeb/</RelativeWebRoot>
    <DefaultPageSize>20</DefaultPageSize>
    <DefaultAbstractSize>200</DefaultAbstractSize>
    <Theme>default</Theme>
</SiteSettings>

大家注意到这里面的字段和我们建立的类里面的公开属性是一一对应的, 因此如果需要增加新的可配置项目只要添加相关的公开属性即可,其它的公共代码部分就不用动了, 这个配置文件类使用单例模式一次性加载文件,在访问速度上是足够快了.并且在配置文件修改的时候不会引起应用程序的重起,只需要调用Save()方法即可生效, 真是非常方便呀.

还没有完?对,还有一个问题,这样的代码是可测试的吗,当然, 这里以NUnit为例,在测试时只需要将配置文件拷贝至测试工程的根目录,注意这里的生成选项使用复制到输出目录,在文件较新时复制. 当然,web.cofig也要拷贝至测试工程根目录下面并改名为   测试工程名称.dll.config  就可以了. 测试代码如下:
[Test]
        public void ConfigFileTest()
        {
            SiteSettings.Instance.Theme 
= "default";
            Assert.IsTrue(SiteSettings.Instance.Theme.Equals(
"default", StringComparison.InvariantCultureIgnoreCase));
            SiteSettings.Instance.Theme 
= "blue";
            SiteSettings.Save();
            Assert.IsTrue(SiteSettings.Instance.Theme.Equals(
"blue", StringComparison.InvariantCultureIgnoreCase));
        }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号