想必做过中型以上工程项目的小伙伴都听说过依赖倒置、控制反转、依赖注入等软件工程概念。能够熟悉使用抽象与依赖倒置在工程开发上会有很多好处,比如提高代码复用性、实现真正的单元测试、减少修改模块的必要等。这次为大家介绍一个Rust
中辅助依赖注入的库。
shaku
Shaku 是一个依赖注入库。亦可单独直接使用也可与其他应用框架整合使用,比如Rocket (请参照 shaku_rocket
).
入门
注意: 本入门指南重点介绍在应用程序(或技术上说,容器)的整个生命周期内都有效的组件。阅读此入门指南后,请查看provider
模块,以了解如何创建寿命较短的服务。
结构化你的应用程序
从应用程序的结构和特征开始。使用Arc
作为依赖项。
use std::sync::Arc;
trait IOutput {
fn write(&self, content: String);
}
trait IDateWriter {
fn write_date(&self);
}
struct ConsoleOutput;
impl IOutput for ConsoleOutput {
fn write(&self, content: String) {
println!("{}", content);
}
}
struct TodayWriter {
output: Arc<dyn IOutput>,
today: String,
year: usize,
}
impl IDateWrite