ruwebframe 0.1.1

A brief description of your crate.
Documentation
// ==================== 使用示例 ====================

use dicontainer::Container;
use ruwebframe::rudi::dicontainer::dicontainer;

#[derive(Debug, Clone)]
struct Database {
    id: u64,
}

impl Database {
    fn new() -> Self {
        println!(">>> Database::new() 被调用了!");
        Self { id: rand::random() }
    }
}

#[derive(Debug)]
struct Logger {
    id: usize,
}

impl Logger {
    fn new() -> Self {
        use std::sync::atomic::{AtomicUsize, Ordering};
        static COUNTER: AtomicUsize = AtomicUsize::new(0);
        let id = COUNTER.fetch_add(1, Ordering::SeqCst);
        println!(">>> Logger::new() 第 {}", id);
        Self { id }
    }
}

#[test]
fn test_rucontainer() {
    let mut container = Container::new();

    // 1. 注册多例:每次 get 都创建新的 Database
    container.register("db", Database::new);

    // 2. 注册单例:Logger 只会被创建一次
    container.register_singleton("logger", Logger::new);

    println!("--- 第一次 get db ---");
    let db1 = container.get::<Database>("db").unwrap();
    eprintln!("db1: {:?}\n", db1);

    println!("--- 第二次 get db ---");
    let db2 = container.get::<Database>("db").unwrap();
    println!("db2: {:?}\n", db2);

    println!("--- 第一次 get logger ---");
    let log1 = container.get_singleton::<Logger>("logger").unwrap();
    println!("log1: {:?}\n", log1);

    println!("--- 第二次 get logger ---");
    let log2 = container.get_singleton::<Logger>("logger").unwrap();
    println!("log2: {:?}\n", log2);

    println!("db1 == db2 ? {}", db1.id == db2.id); // false,不同实例
    println!("log1 == log2 ? {}", std::ptr::eq(&log1, &log2)); // true,同一实例
}