1个不稳定版本
0.0.1 | 2021年8月11日 |
---|
#18 在 #inversion-of-control
124 每月下载次数
69KB
1.5K SLoC
轻量级控制反转
use {minfac::{Registered, ServiceCollection}};
let mut collection = ServiceCollection::new();
collection
.with::<Registered<u8>>()
.register(|byte| byte as i16 * 2);
collection.register(|| 1u8);
let provider = collection.build().expect("Configuration is valid");
assert_eq!(Some(2i16), provider.get::<i16>());
特性
- 注册不属于您的crate的类型/特质(例如 std::*)。无需宏。
- 从单独编译的动态库中进行服务注册。有关更多详细信息,请参阅
examples/distributed_simple
- 临时服务作为
T
获取,没有任何额外的装饰,共享服务作为Arc<T>
- 继承而非作用域服务(服务请求可以委派给父
ServiceProvider
) - 服务发现,(
provider.get_all::<MyService>()
返回一个迭代器,它延迟生成所有注册的MyService
实例) - 快速失败。在构建
ServiceProvider
时,会检查所有注册的服务- 是否包含所有依赖项
- 不包含依赖循环
- 通过设计防止了传统IOC的常见陷阱
- 单例服务不能引用作用域服务,因为作用域服务不存在
- 共享服务不能超出其
ServiceProvider
的生命周期(在启用 debug_assertions 时在运行时进行检查)
ServiceProvider
实现 Send+Sync,且无需使用锁即可线程安全#[no_std]
访问示例/文档以获取更多详细信息
依赖项
~49KB