学习NewLife的配置类XmlConfig实现的边界配置文件读写类
UserProfile
csharp
using System;
using System.IO;
using System.Reflection;
namespace HeBingSQL
{
/* 使用示例
[ConfigFile(".hebingsql")]
public class AppConfig : UserProfile<AppConfig >
{
public bool AutoStart { get; set; } = true;
}
*/
/// <summary>
/// 把配置文件保存到用户目录下的通用配置基类
/// </summary>
/// <typeparam name="T">业务配置类</typeparam>
public class UserProfile<T> where T : new()
{
public static T _current;
private static string ConfigFilePath
{
get
{
var attr = typeof(T).GetCustomAttribute<ConfigFileAttribute>();
var fileName = attr?.FileName ?? ".defaultuncleconfig";
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), fileName);
}
}
protected UserProfile()
{
}
public static T Current
{
get
{
if (_current == null)
{
_current = Load();
}
return _current;
}
}
public static T Load()
{
// 获取系统用户目录并设置配置文件路径
string config = "";
if (File.Exists(ConfigFilePath))
{
// 从配置文件中读取快捷方式
config = File.ReadAllText(ConfigFilePath);
return System.Text.Json.JsonSerializer.Deserialize<T>(config);
}
else
{
// 创建默认配置文件
var obj = new T();
string jsonString = System.Text.Json.JsonSerializer.Serialize(obj);
File.WriteAllText(ConfigFilePath, jsonString);
return obj;
}
}
public void Save()
{
// 保存配置到文件的逻辑
// 这里可以使用序列化库将当前对象保存为XML或JSON格式
string jsonString = System.Text.Json.JsonSerializer.Serialize(_current);
File.WriteAllText(ConfigFilePath, jsonString);
}
}
// 读取配置文件名的特性类
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class ConfigFileAttribute : Attribute
{
public string FileName { get; private set; }
public ConfigFileAttribute(string fileName)
{
FileName = fileName;
}
}
}
使用
1,新增一个APP的配置类
csharp
[ConfigFile(".hebingsql")]
public class AppConfig : UserProfile<AppConfig>
{
public bool AutoStart { get; set; } = true;
}
2,使用
csharp
var tmp = MyConfig.Current.AutoStart; // 读取
MyConfig.Current.AutoStart = false; // 赋值
MyConfig.Current.Save(); // 保存