【发布时间】:2018-11-16 19:31:07
【问题描述】:
这是我的 .NET Core 应用程序的设置:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.ConfigureAppConfiguration((builderContext, config) =>
{
var entryAssemblyFolder = new FileInfo(Assembly.GetEntryAssembly().Location).DirectoryName;
IHostingEnvironment env = builderContext.HostingEnvironment;
config
.SetBasePath(entryAssemblyFolder)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.UseStartup<Startup>()
.Build();
}
}
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public static IConfiguration Configuration { get; set; }
}
以上所有内容在程序启动时运行。在程序执行期间的稍后时间点,我希望能够根据启动时未知的数据添加额外的配置。以下是伪代码,因为 ConfigurationBuilder 构造函数没有参数:
public class Helper
{
public void Add(string key, string value)
{
//pseudo-code:
var builder = new ConfigurationBuilder(Startup.Configuration);
builder.AddInMemoryCollection(new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>(key, value)
});
Startup.Configuration = builder.Build();
}
}
如何在保留现有配置的同时添加现有配置(包括 reloadOnChange: true)?
谢谢,
【问题讨论】:
-
似乎对 AddInMemoryCollection 方法的作用存在误解。内存中的集合是配置的数据提供者,最好在实际构建配置之前设置它。重新创建构建器违背了动态重新加载配置更改的目的。 Official documentation
-
我同意。我不想想要重建。我这样做是为了代替我要求的适当解决方案。