https://gitee.com/leijmdas/ruwebframe.git
本文详细介绍了Rust依赖注入框架rudi中make_di_all的代码生成原理。该框架采用编译期无侵入设计,通过AST解析自动扫描标记了BaseEntity/BaseEntitySingle trait的结构体,基于模板生成_init.rs注册文件。核心流程包括:1)加载模板文件;2)使用syn进行源码解析;3)模板变量替换生成代码;4)写入目标文件。运行时通过#[ctor]宏实现自动注册,利用OnceLock和RwLock保证线程安全,支持单例/多例两种模式。设计亮点包括无侵入标记、AST级解析、模板化生成和启动时自动注册机制,实现了轻量高效的依赖注入解决方案。
## `make_di_all` 依赖注入代码生成原理详解
### 一、整体架构概览
整个 `rudi` 模块是一个**编译期无侵入、启动期自动注册**的依赖注入框架。它的核心思想是:**扫描 Rust 源码 → 找到标记了特定 Trait 的 Struct → 自动生成 `_init.rs` 注册文件**。