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.
509
AutoMapper
A convention-based object-object mapper.
581
AutoMapper.Extensions.Microsoft.DependencyInjection
AutoMapper extensions for ASP.NET Core
1,081
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
247
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
256
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
279
Microsoft.Extensions.Caching.Memory
In-memory cache implementation of Microsoft.Extensions.Caching.Memory.IMemoryCache.
328
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
233
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
244
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
231
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
265
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
325
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
349
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
356
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging.
441
Microsoft.Extensions.Logging
Logging infrastructure default implementation for Microsoft.Extensions.Logging. When using NuGet 3.x this package requires at least version 3.4.
313
Microsoft.Extensions.Logging.Configuration
Configuration support for Microsoft.Extensions.Logging.
235
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.
289

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 6 09/10/2026
11.0.0-preview.7.26381.103 18 08/12/2026
11.0.0-preview.6.26359.118 26 07/14/2026
11.0.0-preview.5.26302.115 41 06/09/2026
11.0.0-preview.4.26230.115 35 05/12/2026
11.0.0-preview.3.26207.106 53 04/14/2026
11.0.0-preview.2.26159.112 53 03/12/2026
11.0.0-preview.1.26104.118 51 02/11/2026
10.0.12 6 09/10/2026
10.0.11 17 08/12/2026
10.0.10 20 07/14/2026
10.0.9 29 06/09/2026
10.0.8 30 05/12/2026
10.0.7 52 04/21/2026
10.0.6 49 04/14/2026
10.0.5 54 03/12/2026
10.0.4 56 03/12/2026
10.0.3 66 02/11/2026
10.0.2 124 01/13/2026
10.0.1 85 12/09/2025
10.0.0 122 11/12/2025
10.0.0-rc.2.25502.107 131 10/14/2025
10.0.0-rc.1.25451.107 141 09/09/2025
10.0.0-preview.7.25380.108 140 08/13/2025
10.0.0-preview.6.25358.103 121 07/16/2025
10.0.0-preview.5.25277.114 119 06/08/2025
10.0.0-preview.4.25258.110 117 05/15/2025
10.0.0-preview.3.25171.5 149 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 4 09/08/2026
9.0.19 18 08/12/2026
9.0.18 21 07/14/2026
9.0.17 29 06/09/2026
9.0.16 28 05/13/2026
9.0.15 54 04/14/2026
9.0.14 49 03/12/2026
9.0.13 54 02/11/2026
9.0.12 56 01/13/2026
9.0.11 82 11/12/2025
9.0.10 158 10/14/2025
9.0.9 131 09/09/2025
9.0.8 357 08/07/2025
9.0.7 160 07/09/2025
9.0.6 129 06/12/2025
9.0.5 143 05/16/2025
9.0.4 128 04/09/2025
9.0.3 190 03/25/2025
9.0.2 235 02/14/2025
9.0.1 150 02/11/2025
9.0.0 306 11/15/2024
9.0.0-rc.2.24473.5 146 10/19/2024
9.0.0-rc.1.24431.7 138 09/19/2024
9.0.0-preview.7.24405.7 147 08/22/2024
9.0.0-preview.6.24327.7 153 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 199 07/19/2024
9.0.0-preview.2.24128.5 167 07/19/2024
9.0.0-preview.1.24080.9 147 07/19/2024
8.0.2 538 02/18/2024
8.0.1 224 02/05/2024
8.0.0 545 02/04/2024
8.0.0-rc.2.23479.6 171 07/19/2024
8.0.0-rc.1.23419.4 167 07/19/2024
8.0.0-preview.7.23375.6 167 07/19/2024
8.0.0-preview.6.23329.7 161 07/19/2024
8.0.0-preview.5.23280.8 142 07/19/2024
8.0.0-preview.4.23259.5 156 07/19/2024
8.0.0-preview.3.23174.8 163 07/19/2024
8.0.0-preview.2.23128.3 150 07/19/2024
8.0.0-preview.1.23110.8 146 07/19/2024
7.0.1 202 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 156 07/19/2024
7.0.0-preview.7.22375.6 159 07/19/2024
7.0.0-preview.6.22324.4 160 07/19/2024
7.0.0-preview.5.22301.12 171 07/19/2024
7.0.0-preview.4.22229.4 190 07/19/2024
7.0.0-preview.3.22175.4 159 07/19/2024
7.0.0-preview.2.22152.2 177 07/19/2024
7.0.0-preview.1.22076.8 162 07/19/2024
6.0.2-mauipre.1.22054.8 161 09/07/2024
6.0.1 129 11/15/2024
6.0.0 474 02/04/2024
6.0.0-rc.2.21480.5 178 07/19/2024
6.0.0-rc.1.21451.13 163 07/19/2024
6.0.0-preview.7.21377.19 152 07/19/2024
6.0.0-preview.6.21352.12 164 07/19/2024
6.0.0-preview.5.21301.5 161 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 154 07/19/2024
6.0.0-preview.1.21102.12 157 07/19/2024
5.0.0 266 02/04/2024
5.0.0-rc.2.20475.5 162 07/19/2024
5.0.0-rc.1.20451.14 154 07/19/2024
5.0.0-preview.8.20407.11 162 07/19/2024
5.0.0-preview.7.20364.11 142 07/19/2024
5.0.0-preview.6.20305.6 152 07/19/2024
5.0.0-preview.5.20278.1 168 07/19/2024
5.0.0-preview.4.20251.6 159 07/19/2024
5.0.0-preview.3.20215.2 166 07/19/2024
5.0.0-preview.2.20160.3 148 07/19/2024
5.0.0-preview.1.20120.4 140 07/19/2024
3.1.32 177 07/19/2024
3.1.31 158 07/19/2024
3.1.30 173 07/19/2024
3.1.29 155 07/19/2024
3.1.28 143 07/19/2024
3.1.27 163 07/18/2024
3.1.26 154 07/19/2024
3.1.25 175 07/19/2024
3.1.24 169 07/19/2024
3.1.23 161 07/19/2024
3.1.22 173 07/19/2024
3.1.21 152 07/19/2024
3.1.20 162 07/19/2024
3.1.19 156 07/19/2024
3.1.18 445 02/04/2024
3.1.17 159 07/10/2024
3.1.16 142 07/19/2024
3.1.15 156 07/19/2024
3.1.14 162 07/19/2024
3.1.13 161 07/19/2024
3.1.12 150 07/19/2024
3.1.11 164 07/19/2024
3.1.10 179 07/19/2024
3.1.9 141 07/19/2024
3.1.8 167 07/19/2024
3.1.7 151 07/19/2024
3.1.6 158 07/19/2024
3.1.5 181 07/19/2024
3.1.4 155 07/19/2024
3.1.3 167 07/19/2024
3.1.2 148 07/19/2024
3.1.1 157 07/19/2024
3.1.0 161 07/19/2024
3.1.0-preview3.19553.2 172 07/19/2024
3.1.0-preview2.19525.4 154 07/19/2024
3.1.0-preview1.19506.1 167 07/19/2024
3.0.3 181 07/19/2024
3.0.2 169 07/19/2024
3.0.1 163 07/19/2024
3.0.0 170 07/19/2024
3.0.0-rc1.19456.10 177 07/19/2024
3.0.0-preview9.19423.4 158 07/19/2024
3.0.0-preview8.19405.4 177 07/19/2024
3.0.0-preview7.19362.4 151 07/19/2024
3.0.0-preview6.19304.6 149 07/19/2024
3.0.0-preview5.19227.9 152 07/19/2024
3.0.0-preview4.19216.2 165 07/19/2024
3.0.0-preview3.19153.1 172 07/19/2024
3.0.0-preview.19074.2 161 07/19/2024
3.0.0-preview.18572.1 122 07/19/2024
2.2.0 207 02/05/2024
2.2.0-preview3-35497 153 07/19/2024
2.2.0-preview2-35157 161 07/19/2024
2.2.0-preview1-35029 128 07/19/2024
2.1.1 147 07/19/2024
2.1.0 179 02/20/2024
2.1.0-rc1-final 152 07/19/2024
2.1.0-preview2-final 175 07/19/2024
2.1.0-preview1-final 165 07/19/2024
2.0.2 155 07/19/2024
2.0.1 141 07/19/2024
2.0.0 265 02/04/2024
2.0.0-preview2-final 163 07/19/2024
2.0.0-preview1-final 152 07/19/2024
1.1.2 156 07/19/2024
1.1.1 171 07/19/2024
1.1.0 166 07/19/2024
1.1.0-preview1-final 157 07/19/2024
1.0.2 163 07/19/2024
1.0.1 173 07/19/2024
1.0.0 154 07/19/2024
1.0.0-rc2-final 158 07/19/2024