#configuration #extension #json-configuration #snapshot #anthill #anthill-di

anthill-di-configuration-extension

集成到anthill-di中的Rust配置

4个版本 (稳定)

1.2.5 2022年5月5日
1.2.4 2022年5月4日
0.1.0 2022年4月22日

#364 in 配置


用于 anthill-service-system

MIT许可证

19KB
265

build & tests

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