You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Handlebars注册表保存为结构体成员复用?解决生命周期报错

解决Handlebars实例存入AppState的生命周期问题

在Handlebars 4.3.6版本中,Handlebars结构体本身带有生命周期参数(Handlebars<'reg>),这就是你直接写registry: Handlebars时编译器报错“missing lifetime specifier”的原因。你不需要使用私有内部的Registry模块,也不需要持有引用,正确的做法是让AppState直接拥有Handlebars实例,并正确处理生命周期:

方案1:让结构体与Handlebars生命周期绑定

定义结构体时带上生命周期参数,匹配Handlebars的生命周期:

struct AppState<'a> {
    pool: Pool,
    registry: Handlebars<'a>,
}

初始化时直接将创建好的Handlebars实例存入:

let mut registry = Handlebars::new();
// 在这里完成模板注册等操作
let app_state = AppState {
    pool: your_pool_instance,
    registry,
};

方案2:使用静态生命周期(推荐)

如果你的模板注册没有依赖非静态的外部数据,Handlebars实例可以使用'static生命周期,这样结构体不需要带生命周期参数:

struct AppState {
    pool: Pool,
    registry: Handlebars<'static>,
}

初始化时指定类型为Handlebars<'static>:

let mut registry: Handlebars<'static> = Handlebars::new();
// 注册模板
let app_state = AppState {
    pool: your_pool_instance,
    registry,
};

为什么之前的引用方式不对

你尝试的registry: &'a Handlebars是持有一个Handlebars实例的引用,这会让AppState依赖外部实例的生命周期,增加复杂度。而我们的需求是复用注册表,让AppState直接拥有这个实例才是更合理的设计,也避免了生命周期依赖问题。

内容的提问来源于stack exchange,提问作者jinreal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:25:13