Apq.Cfg 是一个统一配置管理系统,采用模块化设计,核心库 + 扩展包的架构。
| 项目 | 说明 |
|---|---|
| Apq.Cfg | 核心库(JSON + 环境变量) |
| Apq.Cfg.Ini | INI 文件扩展 |
| Apq.Cfg.Xml | XML 文件扩展 |
| Apq.Cfg.Yaml | YAML 文件扩展 |
| Apq.Cfg.Toml | TOML 文件扩展 |
| Apq.Cfg.Redis | Redis 分布式配置扩展 |
| Apq.Cfg.Database | 数据库配置扩展 |
IObservable<ConfigChangeEvent> 订阅变更ConcurrentDictionary 和 Interlocked 操作| 组件 | GitHub Stars | 定位 |
|---|---|---|
| Microsoft.Extensions.Configuration | .NET 官方 | 标准配置框架 |
| NetEscapades.Configuration | ~500 | YAML 扩展 |
| Consul/etcd/Apollo | 10K+ | 分布式配置中心 |
| Figgle/Nett | ~200 | TOML 解析 |
| 功能 | Apq.Cfg | MS.Extensions | Apollo | Consul |
|---|---|---|---|---|
| JSON 支持 | ✅ | ✅ | ✅ | ✅ |
| YAML 支持 | ✅ | ❌(需扩展) | ✅ | ❌ |
| INI 支持 | ✅ | ✅ | ❌ | ❌ |
| XML 支持 | ✅ | ✅ | ❌ | ❌ |
| TOML 支持 | ✅ | ❌ | ❌ | ❌ |
| 环境变量 | ✅ | ✅ | ✅ | ✅ |
| Redis 支持 | ✅ | ❌ | ❌ | ❌ |
| 数据库支持 | ✅ | ❌ | ✅ | ❌ |
| 可写配置 | ✅ | ❌ | ✅ | ✅ |
| 多层级合并 | ✅ | ✅ | ✅ | ❌ |
| 动态重载 | ✅ | ✅ | ✅ | ✅ |
| 防抖处理 | ✅ | ❌ | ✅ | ❌ |
| 增量更新 | ✅ | ❌ | ✅ | ❌ |
| Rx 订阅 | ✅ | ❌ | ❌ | ❌ |
| 编码检测 | ✅ | ❌ | ❌ | ❌ |
| 分布式一致性 | ❌ | ❌ | ✅ | ✅ |
| 管理界面 | ❌ | ❌ | ✅ | ✅ |
| 灰度发布 | ❌ | ❌ | ✅ | ❌ |
ICfgSource (接口)
├── FileCfgSourceBase (抽象基类)
│ ├── JsonFileCfgSource
│ ├── YamlFileCfgSource
│ ├── IniFileCfgSource
│ ├── XmlFileCfgSource
│ └── TomlFileCfgSource
├── EnvVarsCfgSource
├── RedisCfgSource
└── DatabaseCfgSource
优点:
// 层级越高优先级越高
.AddJson("base.json", level: 0)
.AddJson("local.json", level: 1)
.AddEnvironmentVariables(level: 2)
这是 Apq.Cfg 的核心差异化特性,比 MS Configuration 的简单覆盖更灵活:
Set(key, value, targetLevel: 1)SaveAsync(targetLevel: 1)ChangeCoordinator.cs 实现了:
_pendingChangeLevels 和 _processingChangeLevels 交换避免分配从代码中可见多处优化:
_levelsDescendingThreadStatic 复用集合避免 GCInterlocked 原子操作保证线程安全性能数据:
使用 UTF.Unknown 库自动检测文件编码,这是其他配置库少见的特性:
public static Encoding DetectEncoding(string path)
{
var result = CharsetDetector.DetectFromFile(path);
if (result.Detected?.Confidence >= EncodingConfidenceThreshold)
return Encoding.GetEncoding(result.Detected.EncodingName);
return Encoding.UTF8;
}
与 Apollo/Consul 相比:
建议:定位为轻量级本地配置库,不必追求分布式配置中心的完整功能。
部分异常处理较简单:
catch { } // 静默忽略
建议:增加日志记录或可配置的错误处理策略。
175 个测试,100% API 覆盖,多框架测试(.NET 6/8/9),这是亮点。
| 维度 | 评分 | 说明 |
|---|---|---|
| 架构设计 | ⭐⭐⭐⭐ | 模块化清晰,扩展性好 |
| 功能完整性 | ⭐⭐⭐⭐⭐ | 格式支持全面,特性丰富 |
| 性能 | ⭐⭐⭐⭐⭐ | 纳秒级读取,优化到位 |
| 代码质量 | ⭐⭐⭐⭐ | 线程安全,内存优化 |
| 测试覆盖 | ⭐⭐⭐⭐⭐ | 175 测试,多框架验证 |
| 文档 | ⭐⭐⭐ | README 完整,缺高级文档 |
| 生态/社区 | ⭐⭐ | 新项目,尚无社区 |
✅ 推荐使用:
❌ 不推荐使用:
轻量级 ◄─────────────────────────────────► 重量级
MS.Extensions.Configuration
│
▼
Apq.Cfg (本项目)
│
▼
Apollo / Nacos / Consul
Apq.Cfg 填补了 MS Configuration 和分布式配置中心之间的空白,提供了比官方库更丰富的功能(可写、Rx、编码检测),同时保持轻量级和高性能。
分析日期:2025-12-25