Cordis 刻意不依赖 reflect-metadata 等运行时反射设施,而是基于 TypeScript 的声明合并与类型推导来实现依赖管理,这一选择出于工程与生态两方面的考量。
不引入反射意味着框架没有额外的元数据收集与装饰器求值开销,核心代码得以压缩到约 2000 行,运行时除 Node 与 TypeScript 内置能力外没有任何第三方依赖。这使得 Cordis 可以同时在 Browser、Node、Bun 等环境下运行,不被任何特定运行时或绑定所限制。
传统依赖注入框架(如 NestJS、InversifyJS)依赖装饰器与反射,侵入性强且与 TypeScript 的类型系统存在割裂。Cordis 改用声明式依赖声明加模块补充的方式,依赖关系通过 inject 字段与类型拓展表达,既能获得完整的类型推导,又不需要开发者编写繁重的装饰器样板代码。
反射型 IoC 容器通常在应用启动时一次性装配好对象图,之后基本不再变动,这对静态系统足够,却无法应对插件随时来、随时走的动态生态。Cordis 通过声明式依赖加反应式响应,让依赖关系在运行时可被追踪、可被撤销、可被重建,从根本上服务于"可卸"这一目标。