#container #ioc #injectable #choice #run-time #abstract #bind

koval

一个非常简单的 IOC 容器

6 个版本 (重大更新)

0.5.1 2022年1月30日
0.5.0 2022年1月30日
0.4.0 2022年1月29日
0.3.0 2022年1月29日
0.1.0 2022年1月28日

#14 in #choice

每月下载 31 次

MIT 协议

11KB
232 行代码(不含注释)

科瓦尔

一个非常简单的 Rust IOC 框架。运行时,无宏。您可以绑定类型到类型,以及容器到容器,以抽象实现选择。

用法

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);
}

依赖项

~295–760KB
~18K SLoC