4个版本 (稳定)
1.2.5 | 2022年5月5日 |
---|---|
1.2.4 | 2022年5月4日 |
0.1.0 | 2022年4月22日 |
#364 in 配置
19KB
265 行
anthill-di-configuration-extension
集成到anthill-di中的Rust配置
警告
库需要Rust nightly版本才能使用anthill-di
基本概念
首先始终注册配置源
在此阶段,已通过serde_json实现了json加载,但您可以通过实现trait IService来扩展功能
fn _() {
let root_context = DependencyContext::new_root()
root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string(), false))).await.unwrap();
}
然后您可以注册配置类型或自定义快照包装器
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_configuration::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration: Test = root_context.resolve().await.unwrap();
}
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_snapshot::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration_snapshot: ConfigurationSnapshot<Test, JsonFileConfiguration::<Test>> = root_context.resolve().await.unwrap();
}
为了与源同步数据,ConfigurationSnapshot有一个sync
方法。要保存数据,请调用store
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_snapshot::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration_snapshot: ConfigurationSnapshot<Test, JsonFileConfiguration::<Test>> = root_context.resolve().await.unwrap();
// we have some configuration_snapshot.value from file
// now change file
// configuration_snapshot.value stay the same
configuration_snapshot.sync().await.unwrap();
// now we have configuration_snapshot.value from changed file
// change configuration value
configuration_snapshot.value.test_value = "new string".to_string();
// store new value to file
configuration_snapshot.store().await.unwrap();
// now we have changed file
}
请参阅src/tests文件夹中的示例
所需的最小anthill-di版本 1.2.3
依赖项
~4–11MB
~114K SLoC