use dependency_injector::{Container, ScopedContainer};
#[allow(dead_code)]
#[derive(Clone)]
struct Database {
url: String,
}
#[allow(dead_code)]
#[derive(Clone)]
struct UserService {
name: String,
}
#[allow(dead_code)]
#[derive(Clone)]
struct RequestContext {
request_id: String,
}
fn main() {
#[cfg(feature = "logging")]
{
dependency_injector::logging::init();
}
println!("=== Dependency Injector Logging Demo ===\n");
let container = Container::new();
container.singleton(Database {
url: "postgres://localhost/mydb".into(),
});
container.singleton(UserService {
name: "UserService".into(),
});
container.lazy(|| {
println!(" [App] Lazy service being created...");
RequestContext {
request_id: "default".into(),
}
});
let _db = container.get::<Database>().unwrap();
let _users = container.get::<UserService>().unwrap();
let missing = container.try_get::<i32>();
assert!(missing.is_none());
let request_scope = container.scope();
request_scope.singleton(RequestContext {
request_id: "req-12345".into(),
});
let _ctx = request_scope.get::<RequestContext>().unwrap();
let _db_from_child = request_scope.get::<Database>().unwrap();
let scoped = ScopedContainer::from_parent(&container);
scoped.singleton(RequestContext {
request_id: "scoped-req-67890".into(),
});
let _scoped_ctx = scoped.get::<RequestContext>().unwrap();
container.lock();
request_scope.clear();
println!("\n=== Demo Complete ===");
println!("Check the log output above to see structured logging in action!");
println!("\nTip: Use --features logging-json for production (JSON output)");
println!(" Use --features logging-pretty for development (colorful output)");
}