首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【大家的项目】Rudi 0.2.0 - 一个开箱即用的依赖注入框架

【大家的项目】Rudi 0.2.0 - 一个开箱即用的依赖注入框架

作者头像
MikeLoveRust
发布2023-09-26 19:06:55
发布2023-09-26 19:06:55
3610
举报

Rudi

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

由于 Rudi 最开始是以 Koin 为参考,写的基于函数 API 的依赖注入框架,后来发现 inventory 这个库,就又添加了一套属性宏 API。相比起来,函数 API 的功能更全面,遇到属性宏不支持的场景,还得用函数 API (又不是不能用)

但是为了使用属性宏更方便,在 0.2.0 版本中,我把函数 API 的中所有从容器中获取实例的功能,都移植到了属性宏中,所以现在只需要使用属性宏就可以用各种方式从容器中获取实例了。

迁移的过程还是很简单的,将原来使用在 structfieldfnargument 上的 #[di(...)] 改成 #[di(name = ...)],就可以了。

关于新增的属性宏 API,可以参考 Singleton / Transient。

一个 Web 应用的例子

代码语言:javascript
复制
use std::sync::Arc;

use rudi::{Context, Singleton};

trait Service {}

fn transform<T>(t: T) -> Arc<dyn Service>
where
    T: Service + 'static,
{
    Arc::new(t)
}

#[derive(Clone)]
#[Singleton(binds = [transform])]
struct ServiceImpl;

impl Service for ServiceImpl {}

#[derive(Clone)]
#[Singleton]
struct Controller {
    svc: Arc<dyn Service>,
}

#[Singleton]
fn Run(controller: Controller) {
    let _ = controller.svc;
}

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

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

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

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

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

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