I’m writing this post because I found it extremely difficult to find a working example of this online. So, here is the answer I was waiting for:
Azure Functions is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure. In order to make it easier to manage and retrieve configuration settings in Azure Functions, the IOptions<T> interface can be used to bind custom settings to an IOptions instance.
To use IOptions<T> with Azure Functions, you first need to configure the HostBuilder to inject the Options Service to the middleware pipeline. Here is a working config
public class Program
{
public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddOptions<Settings>()
.Configure<IConfiguration>((settings, configuration)
=> configuration.GetSection(nameof(Settings)).Bind(settings));
})
.Build();
host.Run();
}
}
Next, add the Nuget packge for IOptions configuration to your .csproj file:
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" />
Next, create a custom configuration class that represents your settings. This class should have properties for each of the settings you want to bind to.
For example, if you have a MyCustomSetting settings in your local.settings.json file:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"Settings:MyCustomSetting": "Foobar"
}
}
and this is your Custom Settings class:
public class Settings
{
public string MyCustomSetting { get; set; }
}
Next, you can use dependency injection to bind an IOptions<T> instance to your Azure Function. In your function’s class, add a constructor that takes an IOptions<T> instance as a parameter, where T is your custom configuration class.
public class Function1
{
private readonly ILogger logger;
private readonly IOptions<Settings> settings;
public Function1(
ILogger<Function1> logger,
IOptions<Settings> settings)
{
this.logger = logger;
this.settings = settings;
}
You can then access your settings in your function’s code by using the Value property on the IOptions<T> instance.
[Function(nameof(Function1))]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
logger.LogInformation("C# HTTP trigger function processed a request.");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString($"Got My Custom Settings {settings.Value.MyCustomSetting}");
return response;
}
In this example, the Run method will log the values of MySetting1 and MyCustomSetting from the local.settings.json file.
Using IOptions<T> with Azure Functions can make it easier to manage and retrieve configuration settings in your functions. By creating a custom configuration class and binding an IOptions<T> instance to your function, you can access your settings in a strongly-typed and consistent way.
Written with the help of #ChatGPT

