9个版本 (5个破坏性更新)
0.6.1 | 2021年2月5日 |
---|---|
0.6.0 | 2021年1月10日 |
0.5.0 | 2020年6月19日 |
0.4.1 | 2020年6月1日 |
0.1.0 | 2020年2月6日 |
#628 in Rust模式
每月2,011次下载
用于 15 个crate(12个直接使用)
62KB
327 行
Shaku
Shaku是一个编译时依赖注入的Rust库。有关更多详细信息,包括入门指南,请参阅文档。
指南
示例
use shaku::{module, Component, Interface, HasComponent};
use std::sync::Arc;
trait Logger: Interface {
fn log(&self, content: &str);
}
trait DateLogger: Interface {
fn log_date(&self);
}
#[derive(Component)]
#[shaku(interface = Logger)]
struct LoggerImpl;
impl Logger for LoggerImpl {
fn log(&self, content: &str) {
println!("{}", content);
}
}
#[derive(Component)]
#[shaku(interface = DateLogger)]
struct DateLoggerImpl {
#[shaku(inject)]
logger: Arc<dyn Logger>,
today: String,
year: usize,
}
impl DateLogger for DateLoggerImpl {
fn log_date(&self) {
self.logger.log(&format!("Today is {}, {}", self.today, self.year));
}
}
module! {
MyModule {
components = [LoggerImpl, DateLoggerImpl],
providers = []
}
}
fn main() {
let module = MyModule::builder()
.with_component_parameters::<DateLoggerImpl>(DateLoggerImplParameters {
today: "Jan 26".to_string(),
year: 2020
})
.build();
let date_logger: &dyn DateLogger = module.resolve_ref();
date_logger.log_date();
}
组件与提供者
Component
表示服务的单个实例,即单例。 Provider
更像是一个实例的工厂。每次解析组件时,您都将获得相同的实例。每次解析提供者时,您都将获得一个新的实例。
有关 Component
和 Provider
的更多详细信息,请参阅入门指南和提供者入门指南。
最低支持的Rust版本
Shaku支持Rust的最新稳定版本,以及最低的前两个版本(但可能更多)。最低支持版本的变化将在更改日志中注明。
最低支持版本:1.38.0
项目状态
shaku API的基础已经就绪,现在重点是根据用户反馈使项目成熟。我(@Mcat12)在项目中很活跃,但我自己未来没有太多重大变更计划。大多数未来的更改将基于用户反馈。
致谢
这个库最初是在@bgbahoue和@U007D的指导下开始的,最初命名为"he_di"(后来更名为"shaku")。他们的工作激励当前维护者(@Mcat12)继续从他们离开的地方继续这个库。
依赖关系
~66–305KB