1 个不稳定版本

0.1.0 2023年4月19日

#2650 in Rust 模式

MIT 许可证

19KB
380

kizuna

CI-badge Latest Version Docs

🔍 Rust 的简单服务定位器。

此库为 Rust 程序提供简单服务定位器。它允许通过类型轻松插入和检索值,并支持单例值和由工厂函数创建的值。

添加到您的项目

cargo add kizuna

或您的 Cargo.toml

kizuna = "0.1.0"

用法

use kizuna::Locator;

#[derive(Debug, Clone, PartialEq)]
struct Name(&'static str);

#[derive(Debug)]
struct Person(Name);

fn greet(person: Person) {
    println!("Hello {:?}", person.0);
}

fn main() {
    let mut locator = Locator::new();
    
    // Register the dependencies
    locator.insert(Name("Athena"));
    locator.insert_with(|locator| Person(locator.get::<Name>().unwrap()));

    let person = locator.get::<Person>().unwrap();
    assert_eq!(person.0, Name("Athena"));

    // You can call a function injecting the dependencies
    locator.invoke(greet).unwrap();
}

支持 async/await

use kizuna::Locator;

async fn hello(greet: String) -> usize {
    println!("{greet}");
    greet.len()
}

#[tokio::main]
async fn main() {
    let mut locator = Locator::new();
    locator.insert(String::from("hello world"));

    let result = locator.invoke_async(hello).await.unwrap();
    assert_eq!(result, 11);
}

测试

使用 cargo test --lib 运行测试

许可证

本项目受 MIT 许可证许可

无运行时依赖