因为使用.net core写了一些简单的控制台应用程序,并且需要一些配置信息。于是想是用.net framework中的 ConfigurationManager进行处理,发ConfigurationManager在.net core 中不被支持。
.net core配置说明
.NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。
IConfigurationRoot Configuration { get; set; }
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional:true,reloadOnChange:true);
Configuration = builder.Build();
键值读取
Configuration 类只是一个提供了读写名/值对能力的 Providers 集合。通过ConfigurationProvider数据源提供者,配置生成对应的Configuration对应,可以获取名/值对。采用appsettings.json作为数据源,我们配置如下的数据。
{
"version": "1.0.0",
"AppConfig": {
"SiteUrl": [
{
"AppName": "清风博客",
"CheckUrl": "https://www.mlplus.net",
"SendMobile": "130********"
},
{
"AppName": "蚂蚁部落",
"CheckUrl": "http://www.softwhy.com",
"SendMobile": "130********"
}
]
}
}
对于存储在一个有层次的结构中,尤其是使用外部文件(如 JSON、XML、INI)时,可以使用以 : 符号分隔(从层次结构的根开始)的键来取回配置值。使用生成的Configuration读取version和AppConfig的值,如下所示:
Configuration.GetSection("version").Value;
Configuration["version"];
对象读取
将一个对象的属性视为它的子节点,这样对象同样具有类似于Configuration对象的树形层次化结构。可以根据配置的结构来定义这个Option类型,那么Option类型的属性成员将与某个配置节具有一一对应的关系,从而将配置信息绑定为一个具体的Option对象。.NET Core针对配置的Option模型(OptionModel)帮助我们实现了从配置到Option对象之间的绑定,Option模型实现在Microsoft.Extensions.OptionsModel这个NuGet包。创建一个简单的 MyOptions 类如下所示:
public class AppConfig
{
public IList SiteUrl { get; set; }
}
public class Site
{
public string AppName { get; set; }
public string CheckUrl { get; set; }
public string SendMobile { get; set; }
}
通过调用 Configure 将一个 IConfigureOptions 服务加入服务容器,是为了之后应用程序或框架能通过 IOptions 服务来获取配置选项。这里需要.net core 的依赖注入Microsoft.Extensions.DependencyInjection。
using System.Collections.Generic;
using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
public sealed class ConfigUtil
{
private IConfigurationRoot Configuration { get; set; }
private static ConfigUtil configUtil = null;
private static readonly object locker = new object();
private AppConfig appseting;
public AppConfig AppSeting { get { return appseting; } }
public static ConfigUtil GetConfigUtil()
{
if (configUtil == null)
{
lock (locker)
{
if (configUtil == null)
{
configUtil = new ConfigUtil();
}
}
}
return configUtil;
}
private ConfigUtil()
{
string path = Directory.GetCurrentDirectory();
var builder = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("appsettings.json",true,true);
Configuration = builder.Build();
var sp = new ServiceCollection()
.AddOptions()
.Configure(Configuration.GetSection("AppConfig"))
.BuildServiceProvider();
var config=sp.GetService>();
appseting = config.Value;
}
}
转载请注明:清风亦平凡 » .net core配置信息appsettings读取