110,539
社区成员
发帖
与我相关
我的任务
分享
public class ConfigurationSectionHandlerBase<T>:IConfigurationSectionHandler where T : ConfigurationSectionHandlerBase<T>
{
protected static string configName = "ApplicationConfig";
protected static T _instance;
/// <summary>
/// 配置文件实例
/// </summary>
[XmlIgnore()]
public static T Instance
{
get
{
if (_instance == null)
{
lock (typeof(T))
{
if (_instance == null)
{
_instance = ConfigurationManager.GetSection(configName) as T;
if (_instance == null)
{
_instance = CreateInstance();
_instance.SaveConfig();
}
}
}
}
return _instance;
}
}
/// <summary>
/// 配置文件所使用的编码
/// </summary>
[XmlIgnore()]
public Encoding Encoding
{
set
{
_encoding = value;
}
get
{
return _encoding;
}
} private Encoding _encoding;
/// <summary>
/// 保存配置
/// </summary>
public void SaveConfig()
{
if (_instance == null)
{
return;
}
SerializerFactory<T> factory = new SerializerFactory<T>();
ISerializer<T> serializer = factory.GetSerializer();
string xml = serializer.Serialize(_instance);
string configFile = Application.ExecutablePath + ".config";
XmlDocument configDoc = new XmlDocument();
configDoc.Load(configFile);
XmlNode node = configDoc.DocumentElement.SelectSingleNode(configName);
if (node != null)
{
configDoc.DocumentElement.RemoveChild(node);
}
//xml = xml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "");
//xml = "<Data>" + xml + "</Data>";
XmlDocument nodeDoc = new XmlDocument();
nodeDoc.LoadXml(xml);
node = nodeDoc.SelectSingleNode(configName);
node = configDoc.ImportNode(node, true);
configDoc.DocumentElement.AppendChild(node);
configDoc.Save(configFile);
}
private static T CreateInstance()
{
T instance = ReflectionHelper.GetObject(typeof(T)) as T;
return instance;
}
#region IConfigurationSectionHandler Members
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
string outXml = section.OuterXml;
XmlSerializer<T> serializer = new XmlSerializer<T>();
T o = serializer.Deserialize(outXml);
return o;
}
#endregion
}