feat(config): 添加自定义读取和保存方法支持
- 引入 ConfigReader 和 ConfigWriter 委托类型定义 - 在 Config 构造函数中添加自定义读取和保存方法参数 - 实现 ReadConfigFile 和 WriteConfigFile 辅助方法 - 修改文件操作使用自定义方法或默认方法 - 更新测试程序添加多种自定义方法使用示例 - 在文档中添加自定义方法使用的代码示例
This commit is contained in:
106
Test/Program.cs
106
Test/Program.cs
@@ -1,4 +1,5 @@
|
||||
using JackCraft.Config;
|
||||
using System.Text;
|
||||
using JackCraft.Config;
|
||||
|
||||
namespace Test;
|
||||
|
||||
@@ -12,13 +13,104 @@ internal static class Program
|
||||
Test = "test",
|
||||
Abc = 123
|
||||
};
|
||||
var config = new Config(new FileInfo("./config.json"));
|
||||
var a = config.Get("aaa.www.www", "555");
|
||||
var b = config.Get("aaa.bbb", "1");
|
||||
var c = config.Get("aaa.sss", "1");
|
||||
var d = config.Get("bbb.sss", "1");
|
||||
|
||||
config.Delete("aaa.www");
|
||||
// 示例1:使用默认的文件读取和保存方法
|
||||
Console.WriteLine("\n=== 使用默认方法 ===");
|
||||
var config1 = new Config(new FileInfo("./config1.json"));
|
||||
config1.Set("app.name", "MyApp");
|
||||
config1.Set("app.version", "1.0.0");
|
||||
Console.WriteLine($"App Name: {config1.Get<string>("app.name")}");
|
||||
Console.WriteLine($"App Version: {config1.Get<string>("app.version")}");
|
||||
|
||||
// 示例2:使用自定义的读取和保存方法
|
||||
Console.WriteLine("\n=== 使用自定义方法 ===");
|
||||
|
||||
// 自定义读取方法 - 添加日志
|
||||
Config.ConfigReader customReader = filePath =>
|
||||
{
|
||||
Console.WriteLine($"[自定义读取] 正在读取文件: {filePath}");
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
var content = File.ReadAllText(filePath);
|
||||
Console.WriteLine($"[自定义读取] 文件内容: {content}");
|
||||
return content;
|
||||
}
|
||||
|
||||
Console.WriteLine("[自定义读取] 文件不存在,返回空字符串");
|
||||
return "{}";
|
||||
};
|
||||
|
||||
// 自定义保存方法 - 添加日志和备份
|
||||
Config.ConfigWriter customWriter = (filePath, content) =>
|
||||
{
|
||||
Console.WriteLine($"[自定义保存] 正在保存到文件: {filePath}");
|
||||
Console.WriteLine($"[自定义保存] 文件内容: {content}");
|
||||
|
||||
// 创建备份
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
var backupPath = filePath + ".backup";
|
||||
File.Copy(filePath, backupPath, true);
|
||||
Console.WriteLine($"[自定义保存] 已创建备份: {backupPath}");
|
||||
}
|
||||
|
||||
File.WriteAllText(filePath, content);
|
||||
Console.WriteLine("[自定义保存] 文件保存完成");
|
||||
};
|
||||
|
||||
var config2 = new Config(new FileInfo("./config2.json"), customReader, customWriter);
|
||||
config2.Set("app.name", "MyCustomApp");
|
||||
config2.Set("app.version", "2.0.0");
|
||||
config2.Set("app.author", "Jack");
|
||||
|
||||
Console.WriteLine($"App Name: {config2.Get<string>("app.name")}");
|
||||
Console.WriteLine($"App Version: {config2.Get<string>("app.version")}");
|
||||
Console.WriteLine($"App Author: {config2.Get<string>("app.author")}");
|
||||
|
||||
// 示例3:使用加密的自定义读取和保存方法
|
||||
Console.WriteLine("\n=== 使用加密的自定义方法 ===");
|
||||
|
||||
// 简单的Base64编码/解码作为加密示例
|
||||
Config.ConfigReader encryptedReader = filePath =>
|
||||
{
|
||||
Console.WriteLine($"[加密读取] 正在读取加密文件: {filePath}");
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
var encryptedContent = File.ReadAllText(filePath);
|
||||
try
|
||||
{
|
||||
var decodedBytes = Convert.FromBase64String(encryptedContent);
|
||||
var decodedContent = Encoding.UTF8.GetString(decodedBytes);
|
||||
Console.WriteLine("[加密读取] 解密成功");
|
||||
return decodedContent;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("[加密读取] 解密失败,返回空配置");
|
||||
return "{}";
|
||||
}
|
||||
}
|
||||
|
||||
return "{}";
|
||||
};
|
||||
|
||||
Config.ConfigWriter encryptedWriter = (filePath, content) =>
|
||||
{
|
||||
Console.WriteLine($"[加密保存] 正在加密保存到文件: {filePath}");
|
||||
var contentBytes = Encoding.UTF8.GetBytes(content);
|
||||
var encryptedContent = Convert.ToBase64String(contentBytes);
|
||||
File.WriteAllText(filePath, encryptedContent);
|
||||
Console.WriteLine("[加密保存] 加密保存完成");
|
||||
};
|
||||
|
||||
var config3 = new Config(new FileInfo("./config3.encrypted"), encryptedReader, encryptedWriter);
|
||||
config3.Set("secret.apiKey", "12345-ABCDE");
|
||||
config3.Set("secret.password", "mySecretPassword");
|
||||
|
||||
Console.WriteLine($"API Key: {config3.Get<string>("secret.apiKey")}");
|
||||
Console.WriteLine($"Password: {config3.Get<string>("secret.password")}");
|
||||
|
||||
Console.WriteLine("\n所有示例执行完成!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user