Skip to main content

Module container

Module container 

Source
Expand description

App 容器 — DB/Cache/Log 单例 + DI 服务容器

对齐 PHP app() 容器,持有全局配置、单例和服务绑定。

§设计

  • 基于 OnceCell 实现全局单例(线程安全,初始化一次后只读)
  • 持有 AppConfig + 5 个 DB 连接配置 + Cache/Log 占位
  • 后续阶段:接入 SZ-ORM Pool,替换 DatabaseConnection 为真正的连接池
  • 接入 Cache facade
  • 接入日志系统
  • DI阶段:接入服务容器(bind/singleton/make,对齐 PHP app()->bind/make/singleton

§PHP 对齐

// PHP 中的 app() 容器
$app = app();
$db = $app->db;  // 数据库连接
$cache = $app->cache;  // 缓存
$log = $app->log;  // 日志

// 服务绑定与解析(DI)
app()->bind('cache', fn() => new MemoryCache());
app()->singleton('db', fn() => Db::connect());
$cache = app()->make('cache');

§Rust DI 设计

Rust 中用 TypeId 替代 PHP 字符串 key,实现类型安全的服务解析:

use sz_rust_core::container::App;

// 注册单例(整个应用生命周期内只创建一次)
App::with(|app| {
    app.singleton(|| MyService::new());
});

// 解析服务(类型安全,无需 downcast 字符串 key)
let svc = App::global().unwrap().make::<MyService>();

Structs§

App
App 容器(全局单例)
Container
DI 服务容器 — 服务注册/解析/生命周期管理

Enums§

Lifetime
服务生命周期

Type Aliases§

ScopeId
请求作用域 ID