IOptions
public class AppConfigDemo
{
public string Name { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public Behavior Behavior { get; set; }
}
public class Behavior
{
public bool IsRead { get; set; }
public bool IsWrite { get; set; }
}
public static void Run()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var serviceProvider = new ServiceCollection()
.AddOptions()
.Configure<AppConfigDemo>(configuration)
.BuildServiceProvider();
var options = serviceProvider.GetRequiredService<IOptions<AppConfigDemo>>();
var appConfig = options.Value;
Console.WriteLine($"Name:{appConfig.Name}");
Console.WriteLine($"StartDate:{appConfig.StartDate}");
Console.WriteLine($"EndDate:{appConfig.EndDate}");
Console.WriteLine($"Behavior.IsRead:{appConfig.Behavior.IsRead}");
Console.WriteLine($"Behavior.IsWrite:{appConfig.Behavior.IsWrite}");
}
IOptionsSnapshot
可配置多个节点
public static void Run()
{
var config = new ConfigurationBuilder()
.AddJsonFile(@"appsettings.json")
.Build();
var serviceProvider = new ServiceCollection()
.Configure<AppSetting>("node1", config.GetSection("node1"))
.Configure<AppSetting>("node2", config.GetSection("node2"))
.BuildServiceProvider();
var options = serviceProvider.GetRequiredService<IOptionsSnapshot<AppSetting>>();
Read(options.Get("node1"));
Read(options.Get("node2"));
Read(options.Value);
}
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; }
}
IOptionsMonitor
可监视配置变化
public class AppConfigDemo
{
public string Name { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public Behavior Behavior { get; set; }
}
public class Behavior
{
public bool IsRead { get; set; }
public bool IsWrite { get; set; }
}
public static void Run()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.Build();
var serviceProvider = new ServiceCollection()
.AddOptions()
.Configure<AppConfigDemo>(configuration)
.BuildServiceProvider();
var options = serviceProvider.GetRequiredService<IOptionsMonitor<AppConfigDemo>>();
options.OnChange(appConfig =>
{
Console.Clear();
Console.WriteLine($"Name:{appConfig.Name}");
Console.WriteLine($"StartDate:{appConfig.StartDate}");
Console.WriteLine($"EndDate:{appConfig.EndDate}");
Console.WriteLine($"Behavior.IsRead:{appConfig.Behavior.IsRead}");
Console.WriteLine($"Behavior.IsWrite:{appConfig.Behavior.IsWrite}");
});
Console.Read();
}
选项模式验证
public class AppConfigDemo
{
public string Name { get; set; }
public string Version { get; set; }
}
public static void Run(string[] args)
{
var mapping = new Dictionary<string, string>()
{
["-n"] = "Name",
["-ver"] = "Version"
};
var config = new ConfigurationBuilder()
.AddCommandLine(args, mapping)
.Build();
var services = new ServiceCollection();
services.AddOptions<AppConfigDemo>()
.Configure(options =>
{
options.Name = config["Name"] ?? "";
options.Version = config["Version"] ?? "";
})
.Validate(demo => demo.Version.StartsWith("Alpha"), "Version 参数无效")
.Validate(demo => demo.Name.EndsWith("App"), "Name 参数无效");
try
{
var options = services.BuildServiceProvider()
.GetRequiredService<IOptions<AppConfigDemo>>().Value;
Console.WriteLine(options.Name);
Console.WriteLine(options.Version);
}
catch (OptionsValidationException ex)
{
Console.WriteLine(ex.Message);
}
}