1 个不稳定版本
0.1.0 | 2021年10月22日 |
---|
#12 在 #thruster
109 每月下载次数
在 thruster 中使用
12KB
131 行
Thruster Jab
因为这个是一个依赖注入库,并且注入的是“注射”,而在英国,“注射”被称为“jabs”。
这是什么?
Thruster Jab 是一个依赖注入库,用于满足你的服务注入需求。它通过 Box<dyn Any>
实现动态分发。如果你正在寻找需要模拟以进行测试的东西(比如说,需要外部调用的API或非常昂贵的服务),那么Jab可能对你有帮助。
示例
尽管是为 thruster 构建的,但Jab可以独立使用。一个简单的例子是
struct A(i32);
trait C {}
impl C for A {}
let mut jab = JabDI::default();
let a = A(0);
provide!(jab, dyn C, a);
let something = fetch!(jab, dyn C); // This is the original a that we passed in, now as a C trait.
一个更长但更“复制粘贴”的例子(从我们的测试中取的,因为我比较懒)
// Just making two structs that impl two traits
#[derive(Debug, PartialEq)]
struct A(i32);
#[derive(Debug, PartialEq)]
struct B(i32);
trait C {
fn valc(&self) -> i32;
}
trait D {
fn vald(&self) -> i32;
}
impl C for A {
fn valc(&self) -> i32 {
self.0
}
}
impl D for B {
fn vald(&self) -> i32 {
self.0
}
}
// This is the good part
let mut jab = JabDI::default();
let a = A(0);
let b = B(1);
provide!(jab, dyn C, a);
provide!(jab, dyn D, b);
assert_eq!(
0,
fetch!(jab, dyn C).valc(),
"it should correctly find struct A for trait C"
);
assert_eq!(
1,
fetch!(jab, dyn D).vald(),
"it should correctly find struct B for trait D"
);
对于实际测试的使用,请查看我们的 hello_world.rs
示例。