给 IConfiguration 写一个 GetAppSetting 扩展方法
Intro
在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config,并重新设计了一套完整的配置系统,可以支持 json/xml/ini/环境变量等。
在 .net core 中有一个 GetConnectionString 的扩展方法用来比较方便的获取链接字符串,类似于在 .net framework 中使用 ConfigurationManager.ConnectionStrings["key"] 来获取链接字符串。
这次来参考 GetConnectionString 实现一个 GetAppSetting,类似于 .net framework 中使用 ConfigurationManager.AppSettings 来获取配置值。
实现代码
GetConnectionString 是获取 ConnectionStrings 这个节点下的某个配置,
GetAppSetting 来获取 AppSettings 这个节点下的某个配置
实现代码:
///
/// GetAppSetting
/// Shorthand for GetSection("AppSettings")[key]
///
/// IConfiguration instance
/// appSettings key
/// app setting value
public static string GetAppSetting([NotNull]this IConfiguration configuration, string key)
{
return configuration.GetSection("AppSettings")[key];
}
///
/// GetAppSetting
/// Shorthand for GetSection("AppSettings")[key]
///
/// IConfiguration instance
/// appSettings key
/// app setting value
public static T GetAppSetting([NotNull]this IConfiguration configuration, string key)
{
return configuration.GetSection("AppSettings")[key].To();
}
///
/// GetAppSetting
/// Shorthand for GetSection("AppSettings")[key]
///
/// IConfiguration instance
/// appSettings key
/// default value if not exist
/// app setting value
public static T GetAppSetting([NotNull] this IConfiguration configuration, string key, T defaultValue)
{
return configuration.GetSection("AppSettings")[key].ToOrDefault(defaultValue);
}
///
/// GetAppSetting
/// Shorthand for GetSection("AppSettings")[key]
///
/// IConfiguration instance
/// appSettings key
/// default value func if not exist to get a default value
/// app setting value
public static T GetAppSetting([NotNull] this IConfiguration configuration, string key, Func defaultValueFunc)
{
return configuration.GetSection("AppSettings")[key].ToOrDefault(defaultValueFunc);
}
使用
使用起来和 GetConnectionString 差不多
测试 appsettings.json
{
"ConnectionStrings": {
"TestDb": "server=.;database=Test;uid=weihanli;pwd=Admin888"
},
"AppSettings":{
"Number": 12,
"City": "Shanghai"
}
}
GetAppSetting 示例
IConfiguration configuration = new ConfigurationBuilder()
// ...
.AddJsonFile("appsettings.json")
.Build();
var city = configuration.GetAppSetting("City");
var number = configuration.GetAppSetting("Number");
System.Console.WriteLine($"City:{city}, Number:{number}");