我正在尝试ASP.Net Core而我和我正在讨论新的配置实现。我创建了这样的配置:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddUserSecrets();
ConfigurationManager.SetConfiguration(builder.Build());
}
我有自己的ConfigurationManager类,它基本上包含IConfigurationRoot,并且我有一些帮助方法。
public static class ConfigurationManager
{
private static IConfigurationRoot _configuration { get; set; }
public static IConfigurationRoot GetConfiguration()
{
return _configuration;
}
public static void SetConfiguration(IConfigurationRoot configuration)
{
_configuration = configuration;
}
public static string GetString(string appSettingKey)
{
return _configuration.GetValue<string>(appSettingKey);
}
public static IConfigurationSection GetSection(string sectionKey)
{
return _configuration.GetSection(sectionKey);
}
}
我可以访问我的&#39; Foo&#39;设置如下:
var foo = ConfigurationManager.GetString("Foo");
当我运行我的应用程序时,上面的代码将为我提供&#39; Foo&#39;的价值,这是&#34; Bar&#34;。如果我改变了&#39; Foo&#39;在我的applicationsettings.json中,来自&#34; Bar&#34;到&#34; BarBar&#34;当我的应用程序仍在运行并遇到上面的代码时,它将为我提供“Foo”的新价值。
我创建了一个Configuration类,因此我可以将我的设置设置为强类型。
public class Configuration
{
public string Foo { get; set; }
}
我将它绑定到我的配置中:
services.Configure<Configuration>(ConfigurationManager.GetConfiguration());
我可以访问&#39; Foo&#39;在我的控制器中设置依赖注入,如下所示:
public MyController(IOptions<Configuration> config)
{
var foo = config.Value.Foo;
}
当我给控制器打电话时,&#39; Foo&#39;是&#34; Bar&#34;。当我改变&#39; Foo&#39;的价值时进入&#34; BarBar&#34;然后再次打电话给控制器&#39; Foo&#39;仍然是&#34; Bar&#34;在我的强类型配置中。
当我在动态更改applicationsettings.json时,有没有办法让强类型类更改,就像我不使用强类型类一样?