use ctor::ctor;
use std::any::Any;
use std::sync::Arc;
use actix_web::middleware::Logger;
use crate::rudi::dicontainer::direg;
#[derive(Debug, Clone)]
struct Database {
id: u64,
}
impl Database {
fn new() -> Self {
println!(">>> Database::new() 被调用了!");
Self { id: rand::random() }
}
}
const DB_BEAN__NAME:&str = "db.Database.bean_XXXX_db";
const DB_BEAN__NAME_S:&str = "single.db.Database.bean_XXXX_db";
pub fn find_bean_database ( ) -> Option<Arc<Database>> {
direg::get_bean::<Database>(DB_BEAN__NAME )
}
#[ctor(unsafe)]
pub fn register_bean_database ( ) {
direg:: register_singleton(DB_BEAN__NAME, Database::new);
}
#[test]
fn test_001_greg_bean() {
direg:: register_singleton(DB_BEAN__NAME_S, Database::new);
direg:: register (DB_BEAN__NAME, Database::new);
let log1 = direg::get_bean::<Database>(DB_BEAN__NAME_S).unwrap();
let log2 = direg::get_bean::<Database>(DB_BEAN__NAME_S).unwrap();
let log3 = direg::get_bean::<Database>(DB_BEAN__NAME ).unwrap();
println!("多例: log1={:?}, log2={:?},log3={:?}", log1, log2,log3);
if let Some(db) = direg::get_bean::<Database>(DB_BEAN__NAME) {
println!("{:?}", *db); println!("{:?}",db);
}
}
#[test]
fn test_002_greg_bean() {
if let Some(db) = find_bean_database(){
println!("{:?}", *db); println!("{:?}",db);
}
}
#[test]
fn test_003_greg_bean() {
direg:: register_singleton(DB_BEAN__NAME_S, Database::new);
direg:: register (DB_BEAN__NAME, Database::new);
let log1 = direg::get_bean::<Database>(DB_BEAN__NAME_S).unwrap();
let log2 = direg::get_bean::<Database>(DB_BEAN__NAME_S).unwrap();
let log3 = direg::get_bean::<Database>(DB_BEAN__NAME ).unwrap();
println!("多例: log1={:?}, log2={:?},log3={:?}", log1, log2,log3);
if let Some(db) = direg::get_bean::<Database>(DB_BEAN__NAME) {
println!("{:?}", *db); println!("{:?}",db);
}
}