I have a console application where I am building up the configuration
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
var services = new ServiceCollection();
services.AddOptions();
services.Configure<ResourceConfiguration>(config.GetSection("ResourceConfiguration"));
This doesnt work
Error CS1503: Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<ResourceConfiguration>' (29, 55)
I have the following in my using (as well as my own namespaces)
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.IO;
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
Returns IConfigurationRoot which may be the issue?
What am I doing wrong?
This is .NET Core 3.1
Paul
I have created a console app using .NET 6 to help you out.
Check the code below and let us know if it worked. =)
AppSettings.json
{
"SETUP_OPTIONS":
{
"MyProperty": 100,
"MyProperty2": "Success!"
}
}
usings required
using Microsoft.Extensions.Options;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
SetupOptions class
public class SetupOptions
{
public const string ConfigKey = "SETUP_OPTIONS";
public int MyProperty { get; set; }
public string MyProperty2 { get; set; }
}
Program.cs
static async Task Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(currentDirectory)
.AddJsonFile("appsettings.json", optional: false)
.Build();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection, configuration);
var serviceProvider = serviceCollection.BuildServiceProvider();
await serviceProvider.GetService<MyAppClass>().RunAsync(args);
}
private static void ConfigureServices(ServiceCollection serviceCollection, IConfiguration configuration)
{
// AppSettings IOptions configuration
serviceCollection.AddOptions<SetupOptions>().Bind(configuration.GetSection(SetupOptions.ConfigKey));
serviceCollection.AddTransient<MyAppClass>();
}
MyAppClass.cs
public class MyAppClass
{
private readonly SetupOptions _setupOptions;
// Inject IOptions in your constructor
public MyAppClass(IOptions<SetupOptions> setupOptions)
{
_setupOptions = setupOptions?.Value;
}
public async Task RunAsync(string[] args)
{
// Use your Setup Options value loaded from appsettings file.
var myPropertyValue = _setupOptions.MyProperty;
}
}