根据读取不同文件可引入不同的包,
示例代码
public static void Run(string[] args)
{
var keyValueDic = new Dictionary<string, string> { ["Name"] = "Windy", ["Start"] = "2020-5-1", ["End"] = "2020-5-13", };
var config = new ConfigurationBuilder()
.AddInMemoryCollection(keyValueDic)
.Build();
//内存配置读取
var opt = config.Get<AppSetting>();
Console.WriteLine(opt.Name);
Console.WriteLine(opt.Start);
Console.WriteLine(opt.End);
//Json文件读取
var configJson = new ConfigurationBuilder()
.AddJsonFile(@"appsettings.json", true, true).Build();
Read(configJson.Get<AppSetting>());
///可监视文件内容
ChangeToken.OnChange(() => configJson.GetReloadToken(), () =>
{
//文件内容有变化,重新读取文件内容
Read(configJson.Get<AppSetting>());
});
///环境变量读取
Environment.SetEnvironmentVariable("APP_Name", "demo");
Environment.SetEnvironmentVariable("APP_Port", "12345");
var envConfig = new ConfigurationBuilder()
.AddEnvironmentVariables("APP_")
.Build();
Read(envConfig.Get<AppSetting>());
///命令行读取
var cmdMapp = new Dictionary<string, string>
{
["-n"] = "Name",
["-ver"] = "Version"
};
var cmdConfig = new ConfigurationBuilder()
.AddCommandLine(args, cmdMapp)
.Build();
Read(cmdConfig.Get<AppSetting>());
//xml 文件读取
var xmlConfig = new ConfigurationBuilder()
.AddXmlFile(@"App.config")
.Build();
var a = xmlConfig.GetSection("AppConfigDemo");
var b = xmlConfig.GetSection("AppConfigDemo");
var flag = a == b;
Read(a.Get<AppSetting>());
}
static void Read(AppSetting opt)
{
if (opt == null)
{
return;
}
Console.WriteLine("=========");
Console.WriteLine(opt.Name);
Console.WriteLine(opt.Start);
Console.WriteLine(opt.End);
Console.WriteLine(opt.Port);
Console.WriteLine(opt.Verstion);
}
class AppSetting
{
public string Name { set; get; }
public DateTime Start { set; get; }
public DateTime End { set; get; }
public int Port { set; get; }
public string Verstion { set; get; }
}
监视物理磁盘文件,文件如果有修改,重新读取文件内容
public static void Run()
{
var service = new ServiceCollection()
.AddSingleton<IFileProvider>(new PhysicalFileProvider(@"E:\dmz-sYSTEM"))
.AddSingleton<FimgMgr>().BuildServiceProvider();
service.GetService<FimgMgr>()?.WatchFile("abc.txt").Wait();
Console.ReadLine();
}
class FimgMgr
{
readonly IFileProvider fileProvider;
public FimgMgr(IFileProvider fp)
{
fileProvider = fp;
}
internal async Task WatchFile(string file)
{
var d = await ReadFile(file);
Console.WriteLine(d);
ChangeToken.OnChange(() => fileProvider.Watch(file), async () =>
{
var d = await ReadFile(file);
Console.WriteLine(d);
});
}
async Task<string> ReadFile(string file)
{
var d = fileProvider.GetFileInfo(file);
if (d.Exists)
{
using var stream = d.CreateReadStream();
using StreamReader sr = new StreamReader(stream);
return await sr.ReadToEndAsync();
}
return null;
}
}