9个稳定版本

3.1.0 2023年12月20日
3.0.0 2023年11月24日
2.1.2 2023年8月14日
2.1.1 2023年4月11日
1.0.0 2022年9月27日

#206 in Rust模式

Download history 20/week @ 2024-04-15 24/week @ 2024-04-22 28/week @ 2024-04-29 58/week @ 2024-05-06 33/week @ 2024-05-13 29/week @ 2024-05-20 51/week @ 2024-05-27 26/week @ 2024-06-03 38/week @ 2024-06-10 65/week @ 2024-06-17 8/week @ 2024-06-24 34/week @ 2024-07-01 10/week @ 2024-07-08 24/week @ 2024-07-15 29/week @ 2024-07-22

98 每月下载次数
用于 3 crates

MIT 许可证

140KB
3K SLoC

More Dependency Injection   CI Crates.io MIT licensed

More DI 是一个针对 Rust 的依赖注入(DI)库。可以使用 traitstruct 作为注入类型。

你可能正在寻找

功能

此crate提供以下功能

  • 默认 - 依赖注入的抽象,包括 builderinject 功能
  • builder - 配置服务描述符的函数
  • async - 在异步上下文中使用依赖项
  • inject - 生成常见的注入场景
  • lazy - 懒初始化服务解析
  • fmt - 额外的输出格式化
  • alias - 使用替代类型别名

支持的生命周期

服务可以有以下生命周期

  • 瞬态 - 每次请求时创建一个新实例
  • 单例 - 第一次请求时创建一个单一的新实例
  • 作用域 - 每次从提供者请求时创建一个新实例

依赖注入实战

考虑以下特质和结构。

不需要进程宏属性,但它们是添加 DI 到您应用程序的最快、最简单的方法。

use di::*;
use std::rc::Rc;

trait Phrase {
    fn salutation(&self) -> &str;
}

#[injectable(Phrase)]
struct EnglishPhase;

impl Phrase for EnglishPhrase {
    fn salutation(&self) -> &str {
        "Hello world!"
    }
}

#[injectable]
struct Person {
    phase: Rc<dyn Phrase>,
}

impl Person {
    fn speak(&self) -> &str {
        self.phrase.salutation()
    }
}

现在可以将此信息组合到简单的应用程序中

use crate::*;
use di::*;

fn main() {
    let provider = ServiceCollection::new()
        .add(EnglishPhrase::singleton())
        .add(Person::transient())
        .build_provider()
        .unwrap();

    let person = provider.get_required::<Person>();

    println!("{}", person.speak());
}

许可证

该项目遵循 MIT 许可证

依赖项

~0.1–9.5MB
~46K SLoC