# simpledi-rs ## What is simpledi-rs? A simple DI (Dependency Injection) singleton object storage for providing thread-safe shared object management. ## Getting Started ### Cargo.toml #### Add simpledi-rs dependency. ```toml [dependencies] simpledi-rs = "*" ``` ### Usage 1. create a DI container (`DIContainerTrait`) 2. create objects, and add them to the container via `create_dep!` macro 3. initialize the DI container 4. inject DI container to DI aware objects which implements `DependencyInjectTrait` via `inject_dep!` macro 5. use the container to get the managed objects ```rust #[macro_use] extern crate simpledi_rs; use simpledi_rs::di::{DIContainer, DIContainerTrait, DependencyInjectTrait}; use std::sync::Arc; #[derive(Debug)] struct DIAwareStruct(Option>); impl DIAwareStruct { fn new() -> Self { Self { 0: None } } } impl DependencyInjectTrait for DIAwareStruct { fn inject(&mut self, container: Arc) { 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::().unwrap(); } ```