Microsoft.Extensions.Options 8.0.2

已保留前缀
该包有更新的预发布版本可用。
以下为详细版本列表。
dotnet add package Microsoft.Extensions.Options --version 8.0.2                
NuGet\Install-Package Microsoft.Extensions.Options -Version 8.0.2                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用该包。
paket add Microsoft.Extensions.Options --version 8.0.2                
#r "nuget: Microsoft.Extensions.Options, 8.0.2"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本的源代码中以引用该包。
// Install Microsoft.Extensions.Options as a Cake Addin
#addin nuget:?package=Microsoft.Extensions.Options&version=8.0.2

// Install Microsoft.Extensions.Options as a Cake Tool
#tool nuget:?package=Microsoft.Extensions.Options&version=8.0.2                

关于

Microsoft.Extensions.Options 以强类型方式通过依赖注入指定和访问设置,并作为配置、DI 和高级库之间的桥梁。这个库是应用程序开发者使用 DI 来配置 HttpClient Factory 等库的行为的粘合剂。这也使得用户可以对他们的配置获取强类型的视图。

在本包中,您将找到一个用于验证选项的选项验证源生成器,它可以生成非常高效和优化的代码用于验证选项。

关键特性

  • 提供IValidateOptions接口用于验证选项,以及实现此接口的几个泛型ValidateOptions类。
  • OptionsBuilder用于配置选项。
  • 提供为服务集合和OptionsBuilder提供扩展方法来注册和验证选项。
  • 提供一组实现IConfigureNamedOptions接口的泛型ConfigureNamedOptions类,用于配置命名选项。
  • 提供生成选项验证代码的源生成器。
  • 选项缓存、管理和监控。

使用说明

选项验证示例
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; }
}
使用IValidateOptions验证选项
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.Configure<MyConfigOptions>(builder.Configuration.GetSection(
                                        MyConfigOptions.MyConfig));

// OPtions validation through the DI container
builder.Services.AddSingleton<IValidateOptions
                              <MyConfigOptions>, 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;
    }
}

选项验证源生成器示例
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 to the DI Container using the following code:
    //
    // builder.Services.AddSingleton<IValidateOptions
    //                          <MyConfigOptions>, MyConfigValidation>();
    // builder.Services.AddOptions<MyConfigOptions>()
    //        .Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig))
    //        .ValidateDataAnnotations();
}

主要类型

此库提供的主要类型包括:

  • IOptionsIOptionsFactoryIOptionsMonitor
  • IValidateOptionsValidateOptions
  • OptionsBuilderOptionsFactoryOptionsMonitorOptionsManager
  • OptionsServiceCollectionExtensions
  • OptionsValidatorAttribute

附加文档

Microsoft.Extensions.Logging Microsoft.Extensions.Configuration

反馈 & 贡献

Microsoft.Extensions.Options以开源形式发布,遵循MIT许可证。欢迎在GitHub仓库提交错误报告和贡献。

产品 兼容的和附加的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 兼容。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 兼容。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (5.4K)

显示依赖 Microsoft.Extensions.Options 的前 5 个 NuGet 包

下载
Microsoft.Extensions.Logging

Microsoft.Extensions.Logging 的默认日志记录基础设施实现。

Microsoft.Extensions.Caching.Memory

Microsoft.Extensions.Caching.Memory.IMemoryCache 的内存缓存实现。

Microsoft.Extensions.Options.ConfigurationExtensions

提供与Options相关的额外配置特定功能。

Microsoft.AspNetCore.Http

ASP.NET Core默认HTTP功能实现。此包从以下源代码构建:https://github.com/aspnet/AspNetCore/tree/522705f9a27b99ca4ad261f2e89fe51a77b2338e

Microsoft.Extensions.Logging.Configuration

为Microsoft.Extensions.Logging提供配置支持。

GitHub仓库 (379)

显示依赖于Microsoft.Extensions.Options前5个最受欢迎的GitHub仓库

仓库 星数
jellyfin/jellyfin
免费的软件媒体系统
App-vNext/Polly
Polly是一个.NET弹性库和故障转换处理库,允许开发者以直观、线程安全的方式表达诸如重试、断路器、超时、隔离和回退等策略。从6.0.1版本开始,Polly支持.NET Standard 1.1和2.0+。
abpframework/abp
开源的ASP.NET Core Web应用框架!提供了一种具有最佳实践的、有见地的架构,用于在.NET上构建企业级软件解决方案。提供基本的基础设施、横切关注点实现、启动模板、应用程序模块、UI主题、工具文档。
dotnet/AspNetCore.Docs
ASP.NET Core文档
aspnetboilerplate/aspnetboilerplate
ASP.NET Boilerplate - Web应用框架
版本 下载 上次更新
9.0.0-preview.7.24405.7 3,314 8/13/2024
9.0.0-preview.6.24327.7 84,915 7/9/2024
9.0.0-preview.5.24306.7 86,201 6/11/2024
9.0.0-preview.4.24266.19 79,278 5/21/2024
9.0.0-preview.3.24172.9 194,098 4/11/2024
9.0.0-preview.2.24128.5 129,165 3/12/2024
9.0.0-preview.1.24080.9 136,940 2/13/2024
8.0.2 34,546,638 2/13/2024
8.0.1 11,706,260 1/9/2024
8.0.0 102,839,435 11/14/2023
8.0.0-rc.2.23479.6 1,666,858 10/10/2023
8.0.0-rc.1.23419.4 1,012,910 9/12/2023
8.0.0-preview.7.23375.6 487,020 8/8/2023
8.0.0-preview.6.23329.7 363,643 7/11/2023
8.0.0-preview.5.23280.8 255,254 6/13/2023
8.0.0-preview.4.23259.5 434,814 5/16/2023
8.0.0-preview.3.23174.8 337,884 4/11/2023
8.0.0-preview.2.23128.3 315,397 3/14/2023
8.0.0-preview.1.23110.8 308,432 2/21/2023
7.0.1 95,361,653 2/14/2023
7.0.0 202,903,184 11/7/2022
7.0.0-rc.2.22472.3 944,454 10/11/2022
7.0.0-rc.1.22426.10 411,549 9/14/2022
7.0.0-preview.7.22375.6 391,156 8/9/2022
7.0.0-preview.6.22324.4 240,038 7/12/2022
7.0.0-preview.5.22301.12 184,808 6/14/2022
7.0.0-preview.4.22229.4 360,668 5/10/2022
7.0.0-preview.3.22175.4 176,257 4/13/2022
7.0.0-preview.2.22152.2 243,500 3/14/2022
7.0.0-preview.1.22076.8 153,323 2/17/2022
6.0.0 515,682,032 11/8/2021
6.0.0-rc.2.21480.5 1,742,620 10/12/2021
6.0.0-rc.1.21451.13 647,044 9/14/2021
6.0.0-preview.7.21377.19 731,664 8/10/2021
6.0.0-preview.6.21352.12 346,071 7/14/2021
6.0.0-preview.5.21301.5 329,966 6/15/2021
6.0.0-preview.4.21253.7 183,503 5/24/2021
6.0.0-preview.3.21201.4 609,135 4/8/2021
6.0.0-preview.2.21154.6 214,312 3/11/2021 6.0.0-preview.2.21154.6已被弃用,因为它不再维护。
6.0.0-preview.1.21102.12 550,547 2/12/2021 6.0.0-preview.1.21102.12已被弃用,因为它不再维护。
5.0.0 466,024,212 11/9/2020 5.0.0已被弃用,因为它不再维护。
5.0.0-rc.2.20475.5 987,550 10/13/2020 5.0.0-rc.2.20475.5 已弃用,因为不再维护。
5.0.0-rc.1.20451.14 796,277 9/14/2020 5.0.0-rc.1.20451.14 已弃用,因为不再维护。
5.0.0-preview.8.20407.11 540,918 8/25/2020 5.0.0-preview.8.20407.11 已弃用,因为不再维护。
5.0.0-preview.7.20364.11 242,522 7/21/2020 5.0.0-preview.7.20364.11 已弃用,因为不再维护。
5.0.0-preview.6.20305.6 164,692 6/25/2020 5.0.0-preview.6.20305.6 已弃用,因为不再维护。
5.0.0-preview.5.20278.1 89,616 6/10/2020 5.0.0-preview.5.20278.1 已弃用,因为不再维护。
5.0.0-preview.4.20251.6 319,695 5/18/2020 5.0.0-preview.4.20251.6 已弃用,因为不再维护。
5.0.0-preview.3.20215.2 235,430 4/23/2020 5.0.0-preview.3.20215.2 已弃用,因为不再维护。
5.0.0-preview.2.20160.3 344,794 4/2/2020 5.0.0-preview.2.20160.3 已弃用,因为不再维护。
5.0.0-preview.1.20120.4 178,764 3/16/2020 5.0.0-preview.1.20120.4 已弃用,因为不再维护。
3.1.32 16,188,093 12/13/2022
3.1.31 2,527,952 11/8/2022
3.1.30 2,176,806 10/11/2022
3.1.29 2,047,090 9/13/2022
3.1.28 5,697,617 8/9/2022
3.1.27 2,129,936 7/12/2022
3.1.26 1,803,078 6/14/2022
3.1.25 3,205,978 5/10/2022
3.1.24 3,642,218 4/11/2022
3.1.23 3,944,624 3/8/2022
3.1.22 17,031,374 12/14/2021
3.1.21 9,963,747 11/7/2021
3.1.20 4,697,880 10/11/2021
3.1.19 5,156,925 9/14/2021
3.1.18 58,145,505 8/10/2021
3.1.17 6,795,970 7/13/2021
3.1.16 12,529,824 6/8/2021
3.1.15 8,458,330 5/11/2021
3.1.14 18,182,939 4/6/2021
3.1.13 14,525,485 3/9/2021
3.1.12 11,207,780 2/9/2021
3.1.11 19,195,709 1/12/2021
3.1.10 27,902,682 11/9/2020
3.1.9 70,230,453 10/13/2020
3.1.8 71,015,257 9/8/2020
3.1.7 38,673,559 8/11/2020
3.1.6 43,887,869 7/14/2020
3.1.5 44,369,304 6/9/2020
3.1.4 57,193,030 5/12/2020
3.1.3 103,518,215 3/24/2020
3.1.2 75,742,064 2/18/2020
3.1.1 43,269,361 1/14/2020
3.1.0 168,617,634 12/3/2019
3.1.0-preview3.19553.2 1,769,409 11/13/2019 3.1.0-preview3.19553.2 已弃用,因为不再维护。
3.1.0-preview2.19525.4 225,095 11/1/2019 3.1.0-preview2.19525.4 已弃用,因为不再维护。
3.1.0-preview1.19506.1 1,231,095 10/15/2019 3.1.0-preview1.19506.1 已弃用,因为不再维护。
3.0.3 63,193,174 2/18/2020 3.0.3 已弃用,因为它不再维护。
3.0.2 1,143,763 1/14/2020 3.0.2 已弃用,因为它不再维护。
3.0.1 5,632,151 11/18/2019 3.0.1 已弃用,因为它不再维护。
3.0.0 169,606,658 9/23/2019 3.0.0 已弃用,因为它不再维护。
3.0.0-rc1.19456.10 170,893 9/16/2019 3.0.0-rc1.19456.10 已弃用,因为它不再维护。
3.0.0-preview9.19423.4 1,650,198 9/4/2019 3.0.0-preview9.19423.4 已弃用,因为它不再维护。
3.0.0-preview8.19405.4 574,922 8/13/2019 3.0.0-preview8.19405.4 已弃用,因为它不再维护。
3.0.0-preview7.19362.4 189,713 7/23/2019 3.0.0-preview7.19362.4 已弃用,因为它不再维护。
3.0.0-preview6.19304.6 433,130 6/12/2019 3.0.0-preview6.19304.6 已弃用,因为它不再维护。
3.0.0-preview5.19227.9 789,086 5/6/2019 3.0.0-preview5.19227.9 已弃用,因为它不再维护。
3.0.0-preview4.19216.2 54,475 4/18/2019 3.0.0-preview4.19216.2 已弃用,因为它不再维护。
3.0.0-preview3.19153.1 331,786 3/6/2019 3.0.0-preview3.19153.1 已弃用,因为它不再维护。
3.0.0-preview.19074.2 171,722 1/29/2019 3.0.0-preview.19074.2 已弃用,因为它不再维护。
3.0.0-preview.18572.1 158,345 12/4/2018 3.0.0-preview.18572.1 已弃用,因为它不再维护。
2.2.0 560,604,588 12/3/2018 2.2.0 已弃用,因为它不再被维护。
2.2.0-preview3-35497 597,005 10/17/2018 2.2.0-preview3-35497 已弃用,因为它不再被维护。
2.2.0-preview2-35157 542,398 9/12/2018 2.2.0-preview2-35157 已弃用,因为它不再被维护。
2.2.0-preview1-35029 257,062 8/22/2018 2.2.0-preview1-35029 已弃用,因为它不再被维护。
2.1.1 384,561,691 6/18/2018
2.1.0 375,775,525 5/29/2018
2.1.0-rc1-final 653,846 5/6/2018 2.1.0-rc1-final 已弃用,因为它不再被维护。
2.1.0-preview2-final 887,612 4/10/2018 2.1.0-preview2-final 已弃用,因为它不再被维护。
2.1.0-preview1-final 813,983 2/26/2018 2.1.0-preview1-final 已弃用,因为它不再被维护。
2.0.2 32,019,576 5/7/2018 2.0.2 已弃用,因为它不再被维护。
2.0.1 52,872,155 3/13/2018 2.0.1 已弃用,因为它不再被维护。
2.0.0 516,001,619 8/11/2017 2.0.0 已弃用,因为它不再被维护。
2.0.0-preview2-final 412,827 6/28/2017 2.0.0-preview2-final 已弃用,因为它不再被维护。
2.0.0-preview1-final 1,115,085 5/10/2017 2.0.0-preview1-final 已弃用,因为它不再被维护。
1.1.2 23,986,254 5/9/2017 1.1.2 已弃用,因为它不再被维护。
1.1.1 20,607,903 3/6/2017 1.1.1 已弃用,因为它不再被维护。
1.1.0 15,198,623 11/16/2016 1.1.0 已过时,因为它不再维护。
1.1.0-preview1-final 310,061 10/24/2016 1.1.0-preview1-final 已过时,因为它不再维护。
1.0.2 116,121,405 3/6/2017 1.0.2 已过时,因为它不再维护。
1.0.1 3,705,481 12/12/2016 1.0.1 已过时,因为它不再维护。
1.0.0 245,479,876 6/27/2016 1.0.0 已过时,因为它不再维护。
1.0.0-rc2-final 2,046,929 5/16/2016 1.0.0-rc2-final 已过时,因为它不再维护。