Rudi
Rudi,一个开箱即用的依赖注入框架。
之前 Rudi 的属性宏,是基于我对宏编程的简单的理解写的,用起来还可以,但是还是有些不足,比如,不能在属性宏使用关键字,比如async
,只能写成async_constructor
,还是太麻烦了。
经过我对 linkme,syn 的学习,我对 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
}
更多的信息可以在仓库上看到。
欢迎各位使用,有问题欢迎提 issue,如果觉得好用,可以点个 star。
1
共 0 条评论, 1 页
评论区
写评论还没有评论