# 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 是: ```dart final config = ConfigRepository.loadSync(); // 或 final config = await ConfigRepository.load(); ``` ## 代码改造示例 Before: ```dart final name = ConfigLoader.getGeneratorName(); final apiDir = ConfigLoader.getApiDir(); if (!ConfigLoader.shouldSkipFile(filePath)) { /* ... */ } ``` After: ```dart 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" 在源代码与测试中均无匹配