我们知道IConfiguration对象是以字典的结构来存储配置数据的,我们可以利用该对象提供的索引以键值对的形式来读取和修改配置。在ASP.NET Core应用中,我们可以通过调用定义在IWebHostBuilder接口的GetSetting方法和UseSetting方法达到相同的目的。
public interface IWebHostBuilder
{
string GetSetting(string key);
IWebHostBuilder UseSetting(string key, string value);
...
}
如下面的代码片段所示,我们可以通过利用WebApplicationBuilder的WebHost属性将对应的IWebHostBuilder对象提取出来,通过调用其GetSetting方法将以环境变量设置的配置提取出来。通过调用其UseSetting方法提供的键值对会保存到应用的配置中。配置最终的状态被固定下来后转移到了构建的WebApplication对象上。
using System.Diagnostics;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseSetting("foo", "abc");
builder.WebHost.UseSetting("bar", "xyz");
Debug.Assert(builder.WebHost.GetSetting("foo") == "abc");
Debug.Assert(builder.WebHost.GetSetting("bar") == "xyz");
IConfiguration configuration = builder.Configuration;
Debug.Assert(configuration["foo"] == "abc");
Debug.Assert(configuration["bar"] == "xyz");
var app = builder.Build();
configuration = app.Configuration;
Debug.Assert(configuration["foo"] == "abc");
Debug.Assert(configuration["bar"] == "xyz");