Module

Trait Module 

Source
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§

Source

fn providers() -> Vec<DynProvider>

Included providers.

Provided Methods§

Source

fn eager_create() -> bool

Whether the providers included in the module should be created eagerly, default is false.

Source

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§

Source§

impl Module for AutoRegisterModule

Available on crate feature auto-register only.