#injection #thruster #quick #jab

thruster-jab

快速简单的依赖注入

1 个不稳定版本

0.1.0 2021年10月22日

#12#thruster

Download history 54/week @ 2024-04-14 89/week @ 2024-04-21 130/week @ 2024-04-28 72/week @ 2024-05-05 83/week @ 2024-05-12 148/week @ 2024-05-19 92/week @ 2024-05-26 34/week @ 2024-06-02 90/week @ 2024-06-09 77/week @ 2024-06-16 37/week @ 2024-06-23 20/week @ 2024-06-30 34/week @ 2024-07-07 34/week @ 2024-07-14 20/week @ 2024-07-21

109 每月下载次数
thruster 中使用

MIT 许可证

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 示例。

无运行时依赖