OptionsExtensions
OptionsExtensions.GetOptionsTypes(services) searches for all IConfigureOptions<>, IOptions<>, IOptionsMonitor<>, IOptionsSnapshot<>, IOptionsChangeTokenSource<> option types.
// Key-Values
Dictionary<string, string?> map = new Dictionary<string, string?>
{
{ "Car:License", "XYZ-123" }
};
// Create configuration
IConfigurationRoot configuration = new ConfigurationBuilder()
.AddInMemoryCollection(map)
.Build();
// Create dependency injection
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IServiceCollection>(serviceCollection);
serviceCollection
.AddSingleton<IConfiguration>(configuration)
.AddOptions<Car>().BindConfiguration("Car");
IServiceProvider services = serviceCollection.BuildServiceProvider();
// Acquire car
IOptions<Car> carInfo = services.GetService<IOptions<Car>>()!;
WriteLine(carInfo.Value.License); // "XYZ-123"
// Get IConfigureOptions<>, IOptions<>, IOptionsMonitor<>, IOptionsSnapshot<>, IOptionsChangeTokenSource<>
foreach (Type optionsType in OptionsExtensions.GetOptionsTypes(services))
WriteLine(optionsType); // Car
public record Car
{
public string License { get; set; } = null!;
}
Full Example
Full example
using Avalanche.Options;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using static System.Console;
public class optionsextensions
{
public static void Run()
{
{
// <01>
// Key-Values
Dictionary<string, string?> map = new Dictionary<string, string?>
{
{ "Car:License", "XYZ-123" }
};
// Create configuration
IConfigurationRoot configuration = new ConfigurationBuilder()
.AddInMemoryCollection(map)
.Build();
// Create dependency injection
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IServiceCollection>(serviceCollection);
serviceCollection
.AddSingleton<IConfiguration>(configuration)
.AddOptions<Car>().BindConfiguration("Car");
IServiceProvider services = serviceCollection.BuildServiceProvider();
// Acquire car
IOptions<Car> carInfo = services.GetService<IOptions<Car>>()!;
WriteLine(carInfo.Value.License); // "XYZ-123"
// Get IConfigureOptions<>, IOptions<>, IOptionsMonitor<>, IOptionsSnapshot<>, IOptionsChangeTokenSource<>
foreach (Type optionsType in OptionsExtensions.GetOptionsTypes(services))
WriteLine(optionsType); // Car
// </01>
}
}
}
// <01B>
public record Car
{
public string License { get; set; } = null!;
}
// </01B>