//! A UI-independent, thread-local port of Microsoft.Extensions.DependencyInjection.
//!
//! Services (including trait objects) are identified by `TypeId` and returned as `Rc<S>`.
//! Collections are mutable; built providers are immutable snapshots. Dispose providers and
//! scopes explicitly. Constructor factories declare dependencies for build-time validation;
//! arbitrary closures are opaque, as delegate factories are upstream.
//!
//! ```
//! use ferroui_dependency_injection::*;
//! use std::rc::Rc;
//! let mut services = ServiceCollection::new();
//! services.add_singleton::<String, _>(|_| Ok(Rc::new("hello".into())));
//! let provider = services.build_service_provider(Default::default())?;
//! assert_eq!(&*provider.get_required_service::<String>()?, "hello");
//! provider.dispose()?;
//! # Ok::<(), ServiceError>(())
//! ```
pub use *;
pub use *;
pub use *;
pub use *;
pub use *;
pub use *;