#singleton #dependency-injection #object #di #thread-safe #container #management

simpledi-rs

simpledi-rs,一个简单且线程安全的依赖注入库

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 = "*"

用法

  1. 创建一个 DI 容器 (DIContainerTrait)
  2. 创建对象,并通过 create_dep! 宏将它们添加到容器中
  3. 初始化 DI 容器
  4. 通过 inject_dep! 宏将 DI 容器注入到实现 DependencyInjectTrait 的 DI 感知对象中
  5. 使用容器获取管理对象
#[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