pub trait Module {
// Required method
fn providers() -> Vec<DynProvider>;
// Provided methods
fn eager_create() -> bool { ... }
fn submodules() -> Option<Vec<ResolveModule>> { ... }
}Expand description
Represents a module.
§Example
use rudi::{
modules, providers, singleton, transient, Context, DynProvider, Module, ResolveModule,
};
struct Module1;
impl Module for Module1 {
fn eager_create() -> bool {
true
}
fn providers() -> Vec<DynProvider> {
providers![singleton(|_| "Hello").name("1")]
}
}
struct Module2;
impl Module for Module2 {
fn submodules() -> Option<Vec<ResolveModule>> {
Some(modules![Module1])
}
fn providers() -> Vec<DynProvider> {
providers![transient(|_| "World").name("2")]
}
}
let mut cx = Context::create(modules![Module2]);
let mut a = cx.resolve_by_type::<&'static str>();
a.sort();
assert!(format!("{:?}", a) == *r#"["Hello", "World"]"#);Required Methods§
Sourcefn providers() -> Vec<DynProvider>
fn providers() -> Vec<DynProvider>
Included providers.
Provided Methods§
Sourcefn eager_create() -> bool
fn eager_create() -> bool
Whether the providers included in the module should be created eagerly, default is false.
Sourcefn submodules() -> Option<Vec<ResolveModule>>
fn submodules() -> Option<Vec<ResolveModule>>
Included submodules, default is None.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl Module for AutoRegisterModule
Available on crate feature
auto-register only.