using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using System.Collections.Generic;
public static async Task Main()
var container = new ServiceCollection();
container.AddLogging(b => b.AddConsole());
var json = JsonSerializer.Serialize(new {
await File.WriteAllTextAsync("appsettings.json", json);
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
var configuration = config.Build();
container.AddSingleton<IConfiguration>(configuration);
container.ConfigureMyOptions();
container.Configure<MyOptions>(configuration);
using(var scope = container.BuildServiceProvider().CreateScope())
var sp = scope.ServiceProvider;
var logger = sp.GetRequiredService<ILogger<Program>>();
var options = sp.GetRequiredService<IOptions<MyOptions>>().Value;
logger.LogInformation(options.Value);
logger.LogInformation(options.Value1);
logger.LogInformation(options.Value2);
logger.LogInformation(options.Value3);
logger.LogInformation(options.Value4);
Console.WriteLine("Finished");
public string Value {get;set;} = "Default1";
public string Value1 {get;set;} = "Default1";
public string Value2 {get;set;} = "Default2";
public string Value3 {get;set;} = "Default3";
public string Value4 {get;set;} = "Default4";
public static class OptionsExtensions
public static void ConfigureMyOptions(this IServiceCollection container, IConfiguration config = null)
var tmp = container.BuildServiceProvider();
config = tmp.GetRequiredService<IConfiguration>();
foreach(var section in config.GetChildren())
if(section.Key == nameof(MyOptions))
container.Configure<MyOptions>(section);
container.ConfigureMyOptions(section);