Crates.io | koval |
lib.rs | koval |
version | 0.5.1 |
source | src |
created_at | 2022-01-28 18:09:42.585871 |
updated_at | 2022-01-30 22:35:07.102357 |
description | A very minimal IOC container |
homepage | https://github.com/Dewyer/koval |
repository | https://github.com/Dewyer/koval |
max_upload_size | |
id | 523187 |
size | 11,700 |
A very simple IOC framework for rust. Runtime, no macros. You can bind types to types and containers to containers to abstract implementation choices.
use koval::{Container, Injectable, InjectionError};
pub trait FooServiceTrait: Send + Sync {
fn foo_function(&self) -> bool;
}
pub type IFooService = Arc<dyn FooServiceTrait>;
pub struct FooServiceImpl {}
impl FooServiceTrait for FooServiceImpl {
fn foo_function(&self) -> bool {
true
}
}
impl Injectable<IFooService> for FooServiceImpl {
fn resolve_injectable(_: &Container) -> Result<IFooService, InjectionError> {
Ok(Arc::new(FooServiceImpl {}))
}
}
fn main() {
let container = Container::new()
.bind_singleton::<IFooService, FooServiceImpl>()
.build()
.expect("Container failed to build");
let foo_instance = container.resolve::<IFooService>().unwrap();
assert_eq!(foo_instance.foo_function(), true);
}