如何更新(在内存中)IConfigurationSection的值

时间:2018-08-08 16:47:44

标签: asp.net-core

假设ConfigIConfiguration,而servicesServiceCollection,则下面的代码:

        var section = Config.GetSection("MyDatabaseOptions");
        var configdb = secao.Get<MyDbConfiguration>();
        configdb.ConnectionString = DoSomethingWithSectionObject(configdb);

我想用section的新内容更新configdb.ConnectionString以便能够使用以下命令在ServiceCollection上进行配置:

services.Configure<MyDbConfiguration>(section);

我该怎么做?还是有另一种方法?

1 个答案:

答案 0 :(得分:1)

IConfiguration只是字符串的层次结构,在内部具有指向它的路径,因此您可以使用带有正确键的索引器来修改值:

var section = Config.GetSection("MyDatabaseOptions");
var configdb = section.Get<MyDbConfiguration>();
section[nameof(MyDbConfiguration.ConnectionString)] = DoSomethingWithSectionObject(configdb);

但是它仅适用于字符串,如果您要修改整个结构,会稍微复杂一点,但是思路仍然是相同的-您需要指定属性和字符串值的路径,例如:

Configuration[$"{section.Path}:{nameof(MyDbConfiguration.ConnectionString)}"] = "new value";