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();
container.register("db", Database::new);
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); println!("log1 == log2 ? {}", std::ptr::eq(&log1, &log2)); }