ruwebframe 0.1.2

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation
use std::any::Any;
use std::sync::{Arc, OnceLock, RwLock};
use crate::rudi::dicontainer::dicontainer;

static GLOBAL: OnceLock<RwLock<dicontainer::Container>> = OnceLock::new();

// fn global() -> &'static RwLock<dicontainer::Container> {
//     GLOBAL.get_or_init(|| RwLock::new(dicontainer::Container::new()))
// }
fn global() -> &'static RwLock<dicontainer::Container> {
    GLOBAL.get_or_init(|| {
        let mut c = dicontainer::Container::new();
        dicontainer::bootstrap(&mut c);              // 自动收集所有 inventory::submit! 的注册项
        RwLock::new(c)
    })
}
/// 全局注册多例
pub fn register<F, T>(key: &str, factory: F)
where
    F: Fn() -> T + Send + Sync + 'static,
    T: Any + Send + Sync + 'static,
{
    global().write().unwrap().register(key, factory);
}

/// 全局注册单例
pub fn register_singleton<F, T>(key: &str, factory: F)
where
    F: Fn() -> T + Send + Sync + 'static,
    T: Any + Send + Sync + 'static,
{
    global().write().unwrap().register_singleton(key, factory);
}

/// 全局获取多例
pub fn get<T: Any + Clone>(key: &str) -> Option<T> {
    global().read().unwrap().get(key)
}

/// 全局获取单例(Arc<T>)
pub fn get_singleton<T: Any + Send + Sync>(key: &str) -> Option<Arc<T>> {
    global().read().unwrap().get_singleton(key)
}

pub fn get_bean<T: Any + Send + Sync>(key: &str) -> Option<Arc<T>> {
    global().read().unwrap().get_bean(key)
}