使用Microsoft.Extensions.Configuration读取json、xml、yaml、命令行配置,同时进行自定义配置读取。
1、json配置读取
① appsettings.json(属性还需要选择-> 高级 -> 复制到输出目录)
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"ApplicationSettings": {
"AppName": "MyConsoleApp",
"Version": "1.0"
}
}
② 安装相应依赖
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Binder
Install-Package Microsoft.Extensions.Configuration.Json
③ 直接读取Json的具体数据
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");
IConfiguration configuration = builder.Build();
string ApplicationName = configuration["ApplicationSettings:AppName"];
string ApplicationVersion = configuration["ApplicationSettings:Version"];
Console.WriteLine($"ApplicationName:{ApplicationName}");
Console.WriteLine($"ApplicationVersion:{ApplicationVersion}");
④ 保存Json数据到内存
// 定义Json对应的数据结构
public class AppSettings
{
public AppSettings()
{
Logging = new LoggingSettings();
Application = new ApplicationSettings();
}
public LoggingSettings Logging { get; set; }
public ApplicationSettings Application { get; set; }
}
public class LogLevel
{
public string Default { get; set; }
}
public class LoggingSettings
{
public LoggingSettings()
{
LogLevel = new LogLevel();
}
public LogLevel LogLevel { get; set; }
}
public class ApplicationSettings
{
public string AppName { get; set; }
public string Version { get; set; }
}
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfiguration configuration = builder.Build();
AppSettings appSettings = new AppSettings();
configuration.GetSection("Logging").Bind(appSettings.Logging);
configuration.GetSection("ApplicationSettings").Bind(appSettings.Application);
Console.WriteLine($"Log Level: {appSettings.Logging.LogLevel.Default}");
Console.WriteLine($"App Name: {appSettings.Application.AppName}");
Console.WriteLine($"App Version: {appSettings.Application.Version}");
2、xml配置读取
① application.xml(属性还需要选择-> 高级 -> 复制到输出目录)
<Configuration>
<ApplicationSettings>
<AppName>MyConsoleApp</AppName>
<Version>1.0</Version>
</ApplicationSettings>
<Logging>
<LogLevel>
<Default>Information</Default>
</LogLevel>
</Logging>
</Configuration>
② 安装相应的依赖
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Binder
Install-Package Microsoft.Extensions.Configuration.Xml
③ 直接读取xml的具体数据
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddXmlFile("appsettings.xml");
IConfiguration configuration = builder.Build();
string ApplicationName = configuration["ApplicationSettings:AppName"];
string ApplicationVersion = configuration["ApplicationSettings:Version"];
Console.WriteLine($"ApplicationName:{ApplicationName}");
Console.WriteLine($"ApplicationVersion:{ApplicationVersion}");
④ 保存Xml数据到内存
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddXmlFile("appsettings.xml", optional: false, reloadOnChange: true);
IConfiguration configuration = builder.Build();
AppSettings appSettings = new AppSettings();
configuration.GetSection("Logging").Bind(appSettings.Logging);
configuration.GetSection("ApplicationSettings").Bind(appSettings.Application);
Console.WriteLine($"Log Level: {appSettings.Logging.LogLevel.Default}");
Console.WriteLine($"App Name: {appSettings.Application.AppName}");
Console.WriteLine($"App Version: {appSettings.Application.Version}");
3、yaml配置读取
① application.yaml(属性还需要选择-> 高级 -> 复制到输出目录)
Logging:
LogLevel:
Default: "Information"
ApplicationSettings:
AppName: "MyConsoleApp"
Version: "1.0"
② 安装相应依赖
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Binder
Install-Package Microsoft.Extensions.Configuration.Yaml
③ 直接读取yaml的具体数据
// 1、构造配置对象
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddYamlFile("appsettings.yaml");
IConfiguration configuration = builder.Build();
// 2、读取配置信息
string ApplicatoinName = configuration["ApplicationSettings:AppName"];
string Version = configuration["ApplicationSettings:Version"];
Console.WriteLine($"AppName:{ApplicatoinName}");
Console.WriteLine($"Version:{Version}");
④ 保存yaml数据到内存
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddYamlFile("appsettings.yaml", optional: false, reloadOnChange: true);
IConfiguration configuration = builder.Build();
AppSettings appSettings = new AppSettings();
configuration.GetSection("Logging").Bind(appSettings.Logging);
configuration.GetSection("ApplicationSettings").Bind(appSettings.Application);
Console.WriteLine($"Log Level: {appSettings.Logging.LogLevel.Default}");
Console.WriteLine($"App Name: {appSettings.Application.AppName}");
Console.WriteLine($"App Version: {appSettings.Application.Version}");
4、命令行读取
① 安装相应依赖
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.CommandLine
② 直接读取命令行的数据
using Microsoft.Extensions.Configuration;
IConfiguration configuration = new ConfigurationBuilder().AddCommandLine(args).Build();
string myOption = configuration.GetValue<string>("myOption");
bool verbose = configuration.GetValue<bool>("verbose");
Console.WriteLine(myOption);
Console.WriteLine(verbose);
4、自定义配置读取
Logging.LogLevel.Default=Information
ApplicationSettings.AppName=MyConsoleApp
ApplicationSettings.Version=1.0
using Microsoft.Extensions.Configuration;
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddText("appsettings.txt");
IConfiguration configuration = builder.Build();
string LoggerLevel = configuration.GetValue<string>("Logging.LogLevel.Default");
string AppplicationName = configuration.GetValue<string>("ApplicationSettings.AppName");
string ApplicationVerison = configuration.GetValue<string>("ApplicationSettings.Version");
Console.WriteLine($"Logging.LogLevel.Default => {LoggerLevel}");
Console.WriteLine($"ApplicationSettings.AppName => { AppplicationName}");
Console.WriteLine($"ApplicationSettings.Version => { ApplicationVerison}");
public static class TextConfigurationExtensions
{
public static IConfigurationBuilder AddText(this IConfigurationBuilder configurationBuilder, string FilePath)
{
TextConfigurationSource source = new TextConfigurationSource(FilePath);
return configurationBuilder.Add(source);
}
}
public class TextConfigurationProvider: ConfigurationProvider
{
public TextConfigurationSource Source { get; set; }
public TextConfigurationProvider(TextConfigurationSource source)
{
this.Source = source;
}
public override void Load()
{
var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (!File.Exists(Source.FilePath))
{
throw new FileNotFoundException($"Configuration 文件 '{Source.FilePath}' 没有发现");
}
var lines = File.ReadAllLines(Source.FilePath);
foreach (var line in lines)
{
var keyValuePair = line.Split('=');
if (keyValuePair.Length == 2)
{
data.Add(keyValuePair[0].Trim(), keyValuePair[1].Trim());
}
}
this.Data = data;
}
}
public class TextConfigurationSource: IConfigurationSource
{
public string FilePath { get; set; }
public TextConfigurationSource(string filePath)
{
this.FilePath = filePath;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new TextConfigurationProvider(this);
}
}