1 个不稳定版本
0.1.0 | 2020 年 12 月 15 日 |
---|
#28 在 #singleton
46 每月下载量
用于 huber
9KB
150 行
simpledi-rs
什么是 simpledi-rs?
simpledi-rs 是一个简单的 DI(依赖注入)单例对象存储,用于提供线程安全的共享对象管理。
入门指南
Cargo.toml
添加 simpledi-rs 依赖。
[dependencies]
simpledi-rs = "*"
用法
- 创建一个 DI 容器 (
DIContainerTrait
) - 创建对象,并通过
create_dep!
宏将它们添加到容器中 - 初始化 DI 容器
- 通过
inject_dep!
宏将 DI 容器注入到实现DependencyInjectTrait
的 DI 感知对象中 - 使用容器获取管理对象
#[macro_use]
extern crate simpledi_rs;
use simpledi_rs::di::{DIContainer, DIContainerTrait, DependencyInjectTrait};
use std::sync::Arc;
#[derive(Debug)]
struct DIAwareStruct(Option<Arc<DIContainer>>);
impl DIAwareStruct {
fn new() -> Self {
Self { 0: None }
}
}
impl DependencyInjectTrait for DIAwareStruct {
fn inject(&mut self, container: Arc<DIContainer>) {
self.0 = Some(container.clone())
}
}
fn main() {
let mut container = DIContainer::new(); // (1)
// add obj to DI
create_dep!(DIAwareStruct::new(), container); // (2)
// inject DI container to aware objects
let container_arc = container.init().unwrap(); // (3)
inject_dep!(DIAwareStruct, container_arc.clone()); // (4)
// get container from aware objects
let injected_obj = container_arc.get::<DIAwareStruct>().unwrap();
}
依赖
~4–12MB
~120K SLoC