2.5 KiB
2.5 KiB
ConfigLoader → ConfigRepository 迁移指南
状态: 迁移完成(ConfigLoader 已软弃用,待最终移除) 最后更新: 2025-11-22
背景
旧版使用静态类 ConfigLoader 读取和暴露配置。新版引入 ConfigRepository(实例),提供只读视图和更清晰的 API,同时支持同步/异步加载与内部缓存。
本仓库已完成全量迁移并删除 ConfigLoader,以下为映射关系与示例,便于外部或下游项目迁移。
API 映射表
- getFileHeaderTemplate() → config.fileHeaderTemplate
- getGeneratorName() → config.generatorName
- getAuthor() → config.author
- getCopyright() → config.copyright
- getBaseDir() → config.baseDir
- getApiDir() → config.apiDir
- getModelsDir() → config.modelsDir
- getVersionExtractionPattern() → config.versionExtractionPattern
- getDefaultVersion() → config.defaultVersion
- getBaseResultImport() → config.baseResultImport
- getBasePageResultImport() → config.basePageResultImport
- getApiClientClassName() → config.apiClientClassName
- getApiClientFileName() → config.apiClientFileName
- getIncludedTags() → config.includedTags
- getExcludedTags() → config.excludedTags
- getSplitByTags() → config.splitByTags
- getPackageImports() → config.packageImports
- shouldSkipFile(path) → config.shouldSkipFile(path)
- getIgnoredDirectories() → config.ignoredDirectories
- getIgnoredFiles() → config.ignoredFiles
- getSwaggerUrls() → config.swaggerUrls
其中 config 是:
final config = ConfigRepository.loadSync();
// 或
final config = await ConfigRepository.load();
代码改造示例
Before:
final name = ConfigLoader.getGeneratorName();
final apiDir = ConfigLoader.getApiDir();
if (!ConfigLoader.shouldSkipFile(filePath)) { /* ... */ }
After:
final config = ConfigRepository.loadSync();
final name = config.generatorName;
final apiDir = config.apiDir;
if (!config.shouldSkipFile(filePath)) { /* ... */ }
性能建议
- 在同一执行流程中,尽量复用单个 ConfigRepository 实例,避免重复磁盘 IO。
- 可在构造函数中注入或使用懒加载 + 静态缓存(见 GenerationOutputService 中的 _config 实现)。
向后兼容
- 当前仓库已删除 ConfigLoader;如你的项目仍依赖它,请参照映射表替换为 ConfigRepository,并运行 analyze/test 确认。
验证
- 迁移完成后,应确保:
- dart analyze: 0 errors / 0 warnings(info 忽略)
- dart test: 全部通过
- grep "ConfigLoader" 在源代码与测试中均无匹配