use ruwebframe::rudi::dicontainer::direg;
use std::sync::Arc;
use ruwebframe::database::Database;
use ruwebframe::rudomain::rudb::dbentity::dbexample ;
use ruwebframe::{register_singleton, register_transient, rulog};
use ruwebframe::rudi::{dicontainer, difactroy};
use ruwebframe::rulog::RuLog;
fn test_01_direg() {
direg::register_singleton("db", Database::new);
direg::register("logger", RuLog::new);
let db1 = direg::get_singleton::<Database>("db").unwrap();
let db2 = direg::get_singleton::<Database>("db").unwrap();
println!("Arc::ptr_eq(db1, db2) = {}", Arc::ptr_eq(&db1, &db2));
let log1 = direg::get::<RuLog>("logger").unwrap();
let log2 = direg::get::<RuLog>("logger").unwrap();
println!("多例: log1={:?}, log2={:?}", log1, log2);
}
#[test]
fn test_02_greg_bean() {
direg::register_singleton("db1", Database::new);
direg::register("logger1", RuLog::new);
let db1 = direg::get_bean::<Database>("db1").unwrap();
let db2 = direg::get_bean::<Database>("db1").unwrap();
println!("Arc::ptr_eq(db1, db2) = {}", Arc::ptr_eq(&db1, &db2));
let log1 = direg::get_bean::<RuLog>("logger1").unwrap();
let log2 = direg::get_bean::<RuLog>("logger1").unwrap();
println!("多例: log1={:?}, log2={:?}", log1, log2);
}
#[test]
fn test_03_greg_bean() {
let p = dbexample::find_bean_person().unwrap() ;
rulog::info(p.lock().unwrap() );
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Logger;
impl Logger {
pub fn new() -> Self {
println!(">>> Logger::new()");
Self
}
}
register_transient!("logger", Logger, Logger::new);
register_singleton!("db", Database, Database::new);
#[test]
fn test_04() {
let mut container = dicontainer::Container::new();
dicontainer::bootstrap(&mut container);
let db1 = container.get_singleton::<Database>("db").unwrap();
let db2 = container.get_singleton::<Database>("db").unwrap();
println!("同一实例 ? {}", Arc::ptr_eq(&db1, &db2)); }
#[test]
fn test_05_reg() {
let db1 = dicontainer::get_singleton::<Database>("db").unwrap();
let db2 = dicontainer::get_singleton::<Database>("db").unwrap();
println!("Arc::ptr_eq(db1, db2) = {}", Arc::ptr_eq(&db1, &db2));
let log1 = direg::get::<Logger>("logger").unwrap();
let log2 = direg::get::<Logger>("logger").unwrap();
println!("多例: log1={:?}, log2={:?} {}", log1, log2, log1 == log2);
}
#[test]
fn test_06() {
difactroy::find_bean_di_factroy().unwrap().lock().unwrap().make_di();
}