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模式

Download history 639/week @ 2024-03-14 564/week @ 2024-03-21 413/week @ 2024-03-28 394/week @ 2024-04-04 401/week @ 2024-04-11 416/week @ 2024-04-18 475/week @ 2024-04-25 524/week @ 2024-05-02 361/week @ 2024-05-09 522/week @ 2024-05-16 517/week @ 2024-05-23 535/week @ 2024-05-30 524/week @ 2024-06-06 393/week @ 2024-06-13 545/week @ 2024-06-20 411/week @ 2024-06-27

每月2,011次下载
用于 15 个crate(12个直接使用)

MIT/Apache

62KB
327

Current version Current documentation Build status

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 更像是一个实例的工厂。每次解析组件时,您都将获得相同的实例。每次解析提供者时,您都将获得一个新的实例。

有关 ComponentProvider 的更多详细信息,请参阅入门指南提供者入门指南

最低支持的Rust版本

Shaku支持Rust的最新稳定版本,以及最低的前两个版本(但可能更多)。最低支持版本的变化将在更改日志中注明。

最低支持版本:1.38.0

项目状态

shaku API的基础已经就绪,现在重点是根据用户反馈使项目成熟。我(@Mcat12)在项目中很活跃,但我自己未来没有太多重大变更计划。大多数未来的更改将基于用户反馈。

致谢

这个库最初是在@bgbahoue@U007D的指导下开始的,最初命名为"he_di"(后来更名为"shaku")。他们的工作激励当前维护者(@Mcat12)继续从他们离开的地方继续这个库。

依赖关系

~66–305KB