use ferrunix::{Inject, Ref, Registry};
#[derive(Inject)]
#[provides(singleton = "dyn Logger + Send + Sync")]
pub struct MyLogger {}
impl Logger for MyLogger {
fn info(&self, message: &str) {
println!("INFO: {message}");
}
}
pub trait Logger {
fn info(&self, message: &str);
}
#[derive(Inject)]
#[provides(singleton)]
pub struct MyContext {
#[inject(singleton)]
logger: Ref<Box<dyn Logger + Send + Sync>>,
}
#[test]
fn derive_singleton() {
let registry = Registry::empty();
MyLogger::register(®istry);
MyContext::register(®istry);
registry.validate_all_full().unwrap();
let logger = registry
.singleton::<Box<dyn Logger + Send + Sync>>()
.unwrap();
logger.info("Hello!");
let ctx = registry.singleton::<MyContext>().unwrap();
ctx.logger.info("Hello!");
}