Rust 社区有多种依赖注入DI库可供选择。不过由于 Rust 没有 Java 或 C# 那样的运行时反射机制它的依赖注入库在实现思路上主要分成两条不同的路线。我把几个有代表性的方案整理成了下面这个表格方便你对比和选择库 (Library)核心特点适用场景compile-time (编译时)loso-injectconject(nject的分支)fundle(微软出品)利用宏在编译期解析依赖生成零开销的手写级代码如果依赖关系错误编译器会直接报错。对性能要求极致、希望尽早发现错误的大型项目。runtime (运行时)rust_didillcoi在程序运行时通过容器解析依赖功能更灵活支持动态注册、异步工厂和作用域。需要复杂动态行为如插件化、对运行时开销容忍度较高的应用。reactive (反应式)async-injector支持动态变更当依赖项如数据库连接本身发生变化时依赖它的服务能够自动响应并更新自己。需要热更新、动态配置的高响应性异步系统。 为什么 Rust 的 DI 库“长这样”选择哪个库取决于你对“安全性”和“灵活性”的权衡。这和 Rust 的特性直接相关零开销与类型安全编译时路线Rust 社区推崇“零成本抽象”。像conject这样的库会生成和手写一样高效的代码代价是你必须在编译时就确定所有的依赖关系无法在运行时动态变更。灵活实用运行时路线对于复杂应用运行时注入的灵活性能极大地提升开发效率。例如dill和rust_di它们允许你在应用启动时才组装依赖支持Singleton和Transient等生命周期并会检查循环依赖。 如何选择如果你的目标是编写高性能的系统软件或基础设施并且希望在整个应用生命周期内依赖关系保持稳定编译时方案如conject、loso-inject会更贴合 Rust 的哲学。如果你正在开发一个复杂的、分层的大型应用或微服务并且更看重编码的方便和灵活性那么运行时方案如rust_di、dill可能是更高效的选择。如果你的系统需要处理频繁变化的配置比如从配置中心动态获取async-injector这种反应式的方案会非常有意思。你是打算在什么样的项目里使用依赖注入如果方便分享具体的使用场景比如是写一个需要极致性能的底层服务还是一个结构复杂的业务应用我可以帮你推荐更具体的库