< 返回版块

ZihanType 发表于 2023-08-13 03:33

Tags:依赖注入, dependency-injection, DI, IOC

Rudi

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

之前 Rudi 的属性宏,是基于我对宏编程的简单的理解写的,用起来还可以,但是还是有些不足,比如,不能在属性宏使用关键字,比如async,只能写成async_constructor,还是太麻烦了。

经过我对 linkmesyn 的学习,我对 Rudi 中的属性宏做了重构,现在,已经能满足我的需求了,最起码,能在属性宏中使用关键字了。

一个 0.3.0 版本的例子

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)
}

#[Singleton]
async fn Number() -> i32 {
    42
}

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

impl Service for ServiceImpl {}

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

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

#[tokio::main]
async fn main() {
    let mut cx = Context::auto_register();

    cx.resolve_async().await
}

更多的信息可以在仓库上看到。

Rudi

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

评论区

写评论

还没有评论

1 共 0 条评论, 1 页