foreach (var o in Configuration as Configuration) { var source = o as ConfigurationSource; foreach (var key in source.Data.Keys) { Console.WriteLine(key + ":" + source.Data[key]); } }
配置信息直接转换为实体类
在IServiceCollection接口上还有一个扩展方法.Configure<T>可以将类型IConfiguration的数据转换为一个实体类,该扩展方法的定义如下:
public static IServiceCollection Configure<TOptions>(this IServiceCollection services, IConfiguration config, int order = -1000, string optionsName = "");
举个例子,如果我们定义如下一个实体:
public class AppSettings { public string SiteTitle { get; set; } }
然后在config.json里定义一个相同结构的配置信息,示例如下:
{ "AppSettings": { "SiteTitle": "WebDemo01" } }
那么通过在Startup的构造函数将配置信息加载以后,我们就可以将该信息赋值给AppSettings实例,代码如下:
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
用的时候,使用ApplicationServices的GetRequiredService方法即可,示例如下:
var appSettings = app.ApplicationServices.GetRequiredService<IOptions<AppSettings>>().Options;
注意事项:
在配置信息里,所有的key都是不区分大小写的,即key和KEY是一样的。如果多个配置源有重复的key,则以后最后添加的配置源中的key所对应的值为准。IConfiguration下的GetSubKeys和GetSubKey可以获取某个层级(或以某个层级开头的)的所有key列表。由于Configuration是多实例的,所以按照示例中的代码,该实例在Startup里初始化以后,其它类就无法访问了,所以如果要做全局性的访问,最好在初始化之后将其保存到一个静态变量中。
参考1:https://github.com/aspnet/Configuration
参考2:
您可能感兴趣的文章: