Skip to main content

ferroui_dependency_injection/
lib.rs

1//! A UI-independent, thread-local port of Microsoft.Extensions.DependencyInjection.
2//!
3//! Services (including trait objects) are identified by `TypeId` and returned as `Rc<S>`.
4//! Collections are mutable; built providers are immutable snapshots. Dispose providers and
5//! scopes explicitly. Constructor factories declare dependencies for build-time validation;
6//! arbitrary closures are opaque, as delegate factories are upstream.
7//!
8//! ```
9//! use ferroui_dependency_injection::*;
10//! use std::rc::Rc;
11//! let mut services = ServiceCollection::new();
12//! services.add_singleton::<String, _>(|_| Ok(Rc::new("hello".into())));
13//! let provider = services.build_service_provider(Default::default())?;
14//! assert_eq!(&*provider.get_required_service::<String>()?, "hello");
15//! provider.dispose()?;
16//! # Ok::<(), ServiceError>(())
17//! ```
18
19mod activator_utilities;
20mod default_service_provider_factory;
21mod service_collection;
22mod service_descriptor;
23mod service_provider;
24mod service_type;
25#[cfg(feature = "splat")]
26pub mod splat;
27
28pub use activator_utilities::*;
29pub use default_service_provider_factory::*;
30pub use service_collection::*;
31pub use service_descriptor::*;
32pub use service_provider::*;
33pub use service_type::*;