use crate::rudi::dicontainer::direg;
use crate::rulog;
use std::sync::{Arc, Mutex};
pub trait BeanSingleton: Sized + Send + Sync + 'static {
fn bean_name() -> &'static str {
std::any::type_name::<Self>() }
fn new_bean() -> Self;
fn find_bean() -> Option<Arc<Mutex<Self>>> {
rulog::info2("find_bean bean =》", Self::bean_name());
direg::get_bean::<Mutex<Self>>(Self::bean_name())
}
fn register_bean() {
rulog::info2("register bean =》", Self::bean_name());
direg::register (Self::bean_name(), || Mutex::new(Self::new_bean()));
}
fn register_bean_singleton() {
rulog::info2("register_singleton bean =》", Self::bean_name());
direg::register_singleton(Self::bean_name(), || Mutex::new(Self::new_bean()));
}
}