pub struct Greeter {
message: String,
count: i32,
}
impl Greeter {
pub fn new(message: String, count: i32) -> Self {
Self { message, count }
}
pub fn say_hello(&self) {
for _ in 0..self.count {
println!("{}", self.message);
}
}
}
#[derive(Default)]
pub struct DemoModule;
pub struct Message(String);
pub struct Count(i32);
#[chassis::module]
impl DemoModule {
pub fn provide_count() -> Count {
Count(5)
}
pub fn provide_message() -> Message {
Message("Hello World".to_string())
}
pub fn provide_greeter(message: Message, count: Count) -> Greeter {
Greeter::new(message.0, count.0)
}
}
#[chassis::injector(modules = [DemoModule])]
pub trait DemoComponent {
fn resolve_greeter(&self) -> Greeter;
}
fn main() {
let injector = <dyn DemoComponent>::new().expect("DI container should be consistent");
let greeter = injector.resolve_greeter();
greeter.say_hello();
}