1 个不稳定版本
0.1.0 | 2023年4月19日 |
---|
#2650 in Rust 模式
19KB
380 行
kizuna
🔍 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 许可证许可