Introduction

This post is about the Options Pattern in ASP.NET Core and how to use it to retrieve values from the AppSettings.json file. I will also explain how to inject the options into your classes and provides an example of using the Options Pattern in unit tests.

What is the Options Pattern?

The Options Pattern allows you to bind configuration values from various sources, such as JSON files, environment variables, or command-line arguments, to strongly-typed objects. This pattern provides a convenient way to access configuration values throughout your application.

To use the Options Pattern, you need to follow these steps:

First, you will need to define a class to represent your configuration settings. In this case, the class is YourType, which has a single property YourProperty.

Then in the Startup / Program class, configure the options by calling the Configure method on the IServiceCollection. This method binds the configuration values to the YourType class. Here’s an example:

services.Configure(configuration.GetSection(nameof(YourType))); 
Code language: C# (cs)

This step is crucial to ensure that the injected options are not null.

Finally, in the class where you need to use the options, inject IOptions into the constructor. This allows you to access the options through the Value property. Here’s an example:

private readonly YourType _settings;

public MyClass(IOptions<YourType> options) { _settings = options.Value; }
Code language: C# (cs)

Now you can use the _settings object to access the configuration values.

Unit Testing with Options Pattern

The Options Pattern is particularly useful during unit and integration tests because it allows you to easily mock the values from the configuration file. To do this, you can create a mock instance of IOptions using the Options.Create method and inject it into the constructor of the class that requires the options. Here’s an example:

var mockSettings = new YourType { YourProperty = "test setting value" };
IOptions<YourType> mockedOptions = Options.Create(mockSettings);
Code language: C# (cs)

You can then use the mockedOptions object in your unit test to provide the desired configuration values.

Conclusion

We explained the Options Pattern and how to use it to retrieve values from the AppSettings.json file. We have a simple example of injecting the options into our classes and using the Options Pattern in unit tests.