首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Rudi 0.7.0 - 一个开箱即用的依赖注入框架

Rudi 0.7.0 - 一个开箱即用的依赖注入框架

作者头像
MikeLoveRust
发布2023-12-11 15:53:59
发布2023-12-11 15:53:59
22900
代码可运行
举报
运行总次数:0
代码可运行

Rudi

Rudi,一个开箱即用的 Rust 依赖注入框架。

在之前的 Rudi 版本中,有 2 种作用域,SingeltonTransientSingleton 需要类型实现 Clone,能从 Context 取到引用和有所有权的实例,Transient 不需要实现 Clone,每次从 Context 取到的都是新创建的实例。

但是这 2 种作用域仍然不能覆盖所有场景,比如有些类型只创建一次,只需要引用就可以调用方法,但是没有实现 Clone,不管是开发者忘了还是故意不实现,都会导致无法使用 Singleton 作用域。这种情况下当然可以用 RcArc 包一层,但是我觉得这种情况下,应该有更好的解决方案。

于是在最新的 0.7.0 版本中,我新添加了 SingleOwner 作用域,这种作用域下,类型不需要实现 Clone,但是只能从 Context 取到引用,不能取到所有权。

示例

代码语言:javascript
代码运行次数:0
运行
复制
use rudi::{Context, SingleOwner, Singleton};

struct NotCloneable(i32);

// 注册一个 SingleOwner 作用域的类型
#[SingleOwner]
fn One() -> NotCloneable {
    NotCloneable(1)
}

#[Singleton]
fn Run(#[di(ref)] one: &NotCloneable) {
    let one = one.0;
    assert_eq!(one, 1);
    println!("one: {}", one);
}

fn main() {
    let mut cx = Context::auto_register();
    cx.resolve()
}

更多信息可以在仓库上看到,尤其是 Releases 里的版本更新说明。

Rudi https://github.com/ZihanType/rudi

欢迎各位使用,有问题欢迎提 issue,如果觉得好用,可以点个 star。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rudi
    • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档