Microsoft.Extensions.Options 11.0.0-rc.1.26425.128

About

Microsoft.Extensions.Options provides a strongly typed way of specifying and accessing settings using dependency injection and acts as a bridge between configuration, DI, and higher level libraries. This library is the glue for how an app developer uses DI to configure the behavior of a library like HttpClient Factory. This also enables user to get a strongly-typed view of their configuration.

Within this package, you'll find an options validation source generator that generates exceptionally efficient and optimized code for validating options.

Key Features

  • Offer the IValidateOptions interface for the validation of options, along with several generic ValidateOptions classes that implement this interface.
  • OptionsBuilder to configure options.
  • Provide extension methods for service collections and options builder to register options and validate options.
  • Supply a set of generic ConfigureNamedOptions classes that implement the IConfigureNamedOptions interface for configuring named options.
  • Provide a source generator that generates validation code for options.
  • Options caching, managing and monitoring.

How to Use

Options validation example

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

// Load the configuration and validate it
builder.Services.AddOptions<MyConfigOptions>()
            .Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig))
            .ValidateDataAnnotations();
var app = builder.Build();


// Declare the option class to validate
public class MyConfigOptions
{
    public const string MyConfig = "MyConfig";

    [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]
    public string Key1 { get; set; }
    [Range(0, 1000,
        ErrorMessage = "Value for {0} must be between {1} and {2}.")]
    public int Key2 { get; set; }
    public int Key3 { get; set; }
}

Using IValidateOptions to validate options

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

// Configuration to validate
builder.Services.AddOptions<MyConfigOptions>()
    .Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig))
    // Validate with custom IValidateOptions
    .Validate<MyConfigValidation>();

var app = builder.Build();

public class MyConfigValidation : IValidateOptions<MyConfigOptions>
{
    public MyConfigOptions _config { get; private set; }

    public  MyConfigValidation(IConfiguration config)
    {
        _config = config.GetSection(MyConfigOptions.MyConfig)
            .Get<MyConfigOptions>();
    }

    public ValidateOptionsResult Validate(string name, MyConfigOptions options)
    {
        string? vor = null;
        var rx = new Regex(@"^[a-zA-Z''-'\s]{1,40}$");
        var match = rx.Match(options.Key1!);

        if (string.IsNullOrEmpty(match.Value))
        {
            vor = $"{options.Key1} doesn't match RegEx \n";
        }

        if ( options.Key2 < 0 || options.Key2 > 1000)
        {
            vor = $"{options.Key2} doesn't match Range 0 - 1000 \n";
        }

        if (_config.Key2 != default)
        {
            if(_config.Key3 <= _config.Key2)
            {
                vor +=  "Key3 must be > than Key2.";
            }
        }

        if (vor != null)
        {
            return ValidateOptionsResult.Fail(vor);
        }

        return ValidateOptionsResult.Success;
    }
}

Options Validation Source Generator Example

using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.Extensions.Options;

public class MyConfigOptions
{
    [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]
    public string Key1 { get; set; }

    [Range(0, 1000,
        ErrorMessage = "Value for {0} must be between {1} and {2}.")]
    public int Key2 { get; set; }
    public int Key3 { get; set; }
}

[OptionsValidator]
public partial class MyConfigValidation : IValidateOptions<MyConfigOptions>
{
    // Source generator will automatically provide the implementation of IValidateOptions
    // Then you can add the validation using the following code:
    //
    // builder.Services.AddOptions<MyConfigOptions>()
    //        .Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig))
    //        .Validate<MyConfigValidation>();
}

Main Types

The main types provided by this library are:

  • IOptions, IOptionsFactory, and IOptionsMonitor
  • IValidateOptions and ValidateOptions
  • OptionsBuilder, OptionsFactory, OptionsMonitor, and OptionsManager
  • OptionsServiceCollectionExtensions
  • OptionsValidatorAttribute

Additional Documentation

Microsoft.Extensions.Logging Microsoft.Extensions.Configuration

Feedback & Contributing

Microsoft.Extensions.Options is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.

Showing the top 20 packages that depend on Microsoft.Extensions.Options.

Packages Downloads
AutoMapper
A convention-based object-object mapper.
511
AutoMapper
A convention-based object-object mapper.
581
AutoMapper.Extensions.Microsoft.DependencyInjection
AutoMapper extensions for ASP.NET Core
1,084
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
248
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
261
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
280
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
331
Microsoft.Extensions.Diagnostics.HealthChecks
Components for performing health checks in .NET applications Commonly Used Types: Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckService Microsoft.Extensions.Diagnostics.HealthChecks.IHealthChecksBuilder
384
Microsoft.Extensions.Http
The HttpClient factory is a pattern for configuring and retrieving named HttpClients in a composable way. The HttpClient factory provides extensibility to plug in DelegatingHandlers that address cross-cutting concerns such as service location, load balancing, and reliability. The default HttpClient factory provides built-in diagnostics and logging and manages the lifetimes of connections in a performant way. Commonly Used Types: System.Net.Http.IHttpClientFactory
235
Microsoft.Extensions.Http
The HttpClient factory is a pattern for configuring and retrieving named HttpClients in a composable way. The HttpClient factory provides extensibility to plug in DelegatingHandlers that address cross-cutting concerns such as service location, load balancing, and reliability. The default HttpClient factory provides built-in diagnostics and logging and manages the lifetimes of connections in a performant way. Commonly Used Types: System.Net.Http.IHttpClientFactory
245
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
232
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
266
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
326
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
349
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
357
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
443
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging. When using NuGet 3.x this package requires at least version 3.4.
318
Microsoft.Extensions.Logging.Configuration
Configuration support for Microsoft.Extensions.Logging.
237
Microsoft.Extensions.Options.ConfigurationExtensions
Provides additional configuration specific functionality related to Options.
240
Microsoft.Extensions.Options.ConfigurationExtensions
Provides additional configuration specific functionality related to Options.
290

https://go.microsoft.com/fwlink/?LinkID=799421

.NET 10.0

.NET Standard 2.1

.NET Standard 2.0

.NET Framework 4.6.2

.NET 11.0

  • No dependencies.

Version Downloads Last updated
11.0.0-rc.1.26425.128 10 09/10/2026
11.0.0-preview.7.26381.103 20 08/12/2026
11.0.0-preview.6.26359.118 28 07/14/2026
11.0.0-preview.5.26302.115 43 06/09/2026
11.0.0-preview.4.26230.115 36 05/12/2026
11.0.0-preview.3.26207.106 57 04/14/2026
11.0.0-preview.2.26159.112 55 03/12/2026
11.0.0-preview.1.26104.118 53 02/11/2026
10.0.12 11 09/10/2026
10.0.11 21 08/12/2026
10.0.10 23 07/14/2026
10.0.9 32 06/09/2026
10.0.8 31 05/12/2026
10.0.7 57 04/21/2026
10.0.6 53 04/14/2026
10.0.5 55 03/12/2026
10.0.4 59 03/12/2026
10.0.3 67 02/11/2026
10.0.2 126 01/13/2026
10.0.1 86 12/09/2025
10.0.0 124 11/12/2025
10.0.0-rc.2.25502.107 132 10/14/2025
10.0.0-rc.1.25451.107 143 09/09/2025
10.0.0-preview.7.25380.108 141 08/13/2025
10.0.0-preview.6.25358.103 123 07/16/2025
10.0.0-preview.5.25277.114 124 06/08/2025
10.0.0-preview.4.25258.110 118 05/15/2025
10.0.0-preview.3.25171.5 152 04/12/2025
10.0.0-preview.2.25163.2 145 03/31/2025
10.0.0-preview.1.25080.5 146 04/01/2025
9.0.20 6 09/08/2026
9.0.19 23 08/12/2026
9.0.18 23 07/14/2026
9.0.17 36 06/09/2026
9.0.16 30 05/13/2026
9.0.15 55 04/14/2026
9.0.14 53 03/12/2026
9.0.13 55 02/11/2026
9.0.12 58 01/13/2026
9.0.11 84 11/12/2025
9.0.10 159 10/14/2025
9.0.9 136 09/09/2025
9.0.8 358 08/07/2025
9.0.7 160 07/09/2025
9.0.6 130 06/12/2025
9.0.5 144 05/16/2025
9.0.4 129 04/09/2025
9.0.3 193 03/25/2025
9.0.2 236 02/14/2025
9.0.1 155 02/11/2025
9.0.0 307 11/15/2024
9.0.0-rc.2.24473.5 146 10/19/2024
9.0.0-rc.1.24431.7 141 09/19/2024
9.0.0-preview.7.24405.7 153 08/22/2024
9.0.0-preview.6.24327.7 155 07/19/2024
9.0.0-preview.5.24306.7 159 07/19/2024
9.0.0-preview.4.24266.19 162 07/19/2024
9.0.0-preview.3.24172.9 200 07/19/2024
9.0.0-preview.2.24128.5 170 07/19/2024
9.0.0-preview.1.24080.9 148 07/19/2024
8.0.2 540 02/18/2024
8.0.1 225 02/05/2024
8.0.0 545 02/04/2024
8.0.0-rc.2.23479.6 173 07/19/2024
8.0.0-rc.1.23419.4 168 07/19/2024
8.0.0-preview.7.23375.6 168 07/19/2024
8.0.0-preview.6.23329.7 163 07/19/2024
8.0.0-preview.5.23280.8 143 07/19/2024
8.0.0-preview.4.23259.5 156 07/19/2024
8.0.0-preview.3.23174.8 165 07/19/2024
8.0.0-preview.2.23128.3 150 07/19/2024
8.0.0-preview.1.23110.8 148 07/19/2024
7.0.1 203 02/05/2024
7.0.0 227 02/04/2024
7.0.0-rc.2.22472.3 140 07/19/2024
7.0.0-rc.1.22426.10 158 07/19/2024
7.0.0-preview.7.22375.6 161 07/19/2024
7.0.0-preview.6.22324.4 164 07/19/2024
7.0.0-preview.5.22301.12 172 07/19/2024
7.0.0-preview.4.22229.4 191 07/19/2024
7.0.0-preview.3.22175.4 160 07/19/2024
7.0.0-preview.2.22152.2 178 07/19/2024
7.0.0-preview.1.22076.8 165 07/19/2024
6.0.2-mauipre.1.22054.8 163 09/07/2024
6.0.1 131 11/15/2024
6.0.0 477 02/04/2024
6.0.0-rc.2.21480.5 182 07/19/2024
6.0.0-rc.1.21451.13 163 07/19/2024
6.0.0-preview.7.21377.19 156 07/19/2024
6.0.0-preview.6.21352.12 167 07/19/2024
6.0.0-preview.5.21301.5 164 07/19/2024
6.0.0-preview.4.21253.7 150 07/19/2024
6.0.0-preview.3.21201.4 155 07/19/2024
6.0.0-preview.2.21154.6 155 07/19/2024
6.0.0-preview.1.21102.12 157 07/19/2024
5.0.0 267 02/04/2024
5.0.0-rc.2.20475.5 164 07/19/2024
5.0.0-rc.1.20451.14 155 07/19/2024
5.0.0-preview.8.20407.11 164 07/19/2024
5.0.0-preview.7.20364.11 144 07/19/2024
5.0.0-preview.6.20305.6 152 07/19/2024
5.0.0-preview.5.20278.1 169 07/19/2024
5.0.0-preview.4.20251.6 160 07/19/2024
5.0.0-preview.3.20215.2 166 07/19/2024
5.0.0-preview.2.20160.3 149 07/19/2024
5.0.0-preview.1.20120.4 140 07/19/2024
3.1.32 177 07/19/2024
3.1.31 160 07/19/2024
3.1.30 174 07/19/2024
3.1.29 157 07/19/2024
3.1.28 145 07/19/2024
3.1.27 164 07/18/2024
3.1.26 156 07/19/2024
3.1.25 177 07/19/2024
3.1.24 170 07/19/2024
3.1.23 163 07/19/2024
3.1.22 174 07/19/2024
3.1.21 153 07/19/2024
3.1.20 162 07/19/2024
3.1.19 157 07/19/2024
3.1.18 445 02/04/2024
3.1.17 160 07/10/2024
3.1.16 145 07/19/2024
3.1.15 157 07/19/2024
3.1.14 162 07/19/2024
3.1.13 163 07/19/2024
3.1.12 151 07/19/2024
3.1.11 165 07/19/2024
3.1.10 180 07/19/2024
3.1.9 143 07/19/2024
3.1.8 169 07/19/2024
3.1.7 152 07/19/2024
3.1.6 159 07/19/2024
3.1.5 182 07/19/2024
3.1.4 156 07/19/2024
3.1.3 169 07/19/2024
3.1.2 152 07/19/2024
3.1.1 159 07/19/2024
3.1.0 162 07/19/2024
3.1.0-preview3.19553.2 173 07/19/2024
3.1.0-preview2.19525.4 154 07/19/2024
3.1.0-preview1.19506.1 168 07/19/2024
3.0.3 183 07/19/2024
3.0.2 170 07/19/2024
3.0.1 164 07/19/2024
3.0.0 171 07/19/2024
3.0.0-rc1.19456.10 178 07/19/2024
3.0.0-preview9.19423.4 159 07/19/2024
3.0.0-preview8.19405.4 178 07/19/2024
3.0.0-preview7.19362.4 152 07/19/2024
3.0.0-preview6.19304.6 150 07/19/2024
3.0.0-preview5.19227.9 153 07/19/2024
3.0.0-preview4.19216.2 166 07/19/2024
3.0.0-preview3.19153.1 172 07/19/2024
3.0.0-preview.19074.2 162 07/19/2024
3.0.0-preview.18572.1 123 07/19/2024
2.2.0 209 02/05/2024
2.2.0-preview3-35497 154 07/19/2024
2.2.0-preview2-35157 162 07/19/2024
2.2.0-preview1-35029 129 07/19/2024
2.1.1 148 07/19/2024
2.1.0 180 02/20/2024
2.1.0-rc1-final 154 07/19/2024
2.1.0-preview2-final 176 07/19/2024
2.1.0-preview1-final 166 07/19/2024
2.0.2 157 07/19/2024
2.0.1 141 07/19/2024
2.0.0 266 02/04/2024
2.0.0-preview2-final 164 07/19/2024
2.0.0-preview1-final 152 07/19/2024
1.1.2 157 07/19/2024
1.1.1 172 07/19/2024
1.1.0 167 07/19/2024
1.1.0-preview1-final 158 07/19/2024
1.0.2 164 07/19/2024
1.0.1 173 07/19/2024
1.0.0 155 07/19/2024
1.0.0-rc2-final 159 07/19/2024