ruwebframe 0.1.0

A brief description of your crate.
Documentation
use ctor::ctor;
use ruwebframe::rudi::dicontainer::direg;
use ruwebframe::rudomain::dbexample;
use std::sync::Arc;

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

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

#[derive(Debug, Clone)]
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_greg() {
    // 1. 注册(全局,任意地方都能调)
    direg::register_singleton("db", Database::new);
    direg::register("logger", Logger::new);

    // 2. 获取单例(首次 get 时才 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)); // true

    // 3. 获取多例(每次 get 都 new)
    let log1 = direg::get::<Logger>("logger").unwrap();
    let log2 = direg::get::<Logger>("logger").unwrap();
    println!("多例: log1={:?}, log2={:?}", log1, log2);
}

const DB_BEAN__NAME_S: &str = "db111sss.Database.bean_XXXX_db";
const DB_BEAN__NAME: &str = "db111.Database.bean_XXXX_db";
pub fn find_bean_database() -> Option<Arc<Database>> {
    direg::get_bean::<Database>(DB_BEAN__NAME)
}
pub fn find_bean_database_single() -> Option<Arc<Database>> {
    direg::get_bean::<Database>(DB_BEAN__NAME_S)
}
#[ctor(unsafe)]
pub fn register_bean_database() {
    direg::register_singleton(DB_BEAN__NAME_S, Database::new);
    //  ruregister::register (DB_BEAN__NAME, Database::new);
}
#[test]
fn test1_greg_bean_s() {
    if let Some(db) = find_bean_database_single() {
        println!("{:?}", *db); // 需要 MyStruct 实现 Debug
        // 或者调用方法
        println!("{:?}", db);
    }
    if let Some(db) = find_bean_database_single() {
        println!("{:?}", *db); // 需要 MyStruct 实现 Debug
        // 或者调用方法
        println!("{:?}", db);
    }
}
#[test]
fn test2_greg_bean() {
    if let Some(db) = find_bean_database() {
        println!("{:?}", *db); // 需要 MyStruct 实现 Debug
        // 或者调用方法
        println!("{:?}", db);
    }
    if let Some(db) = find_bean_database() {
        println!("{:?}", *db); // 需要 MyStruct 实现 Debug
        // 或者调用方法
        println!("{:?}", db);
    }
}
#[test]
fn test3_greg_bean() {
    // 1. 注册(全局,任意地方都能调)
    direg::register_singleton("db1", Database::new);
    direg::register("logger1", Logger::new);

    // 2. 获取单例(首次 get 时才 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)); // true

    // 3. 获取多例(每次 get 都 new)
    let log1 = direg::get_bean::<Logger>("logger1").unwrap();
    let log2 = direg::get_bean::<Logger>("logger1").unwrap();
    println!("多例: log1={:?}, log2={:?}", log1, log2);
}
#[test]
fn test4_greg_bean() {
    // 1. 注册(全局,任意地方都能调)
    let mut p = dbexample::find_bean_person().unwrap();
    //p.name = "person1".to_string();
    if let Ok(mut person) = Arc::try_unwrap(p) {
        // person: Person,这里拿到所有权
        person.name = "person1".to_string();
        println!("{}", person);
    }
    // println!("{:?}", p);
}