Refactor code structure for improved readability and maintainability; removed redundant code blocks and optimized function calls.
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
api-governance / spectral-lint (push) Has been cancelled

This commit is contained in:
master
2025-11-20 07:50:52 +02:00
parent 616ec73133
commit 10212d67c0
473 changed files with 316758 additions and 388 deletions

View File

@@ -0,0 +1,5 @@
{
"version": 2,
"contentHash": "Ib6BCCjisp7ZUdhtNpSulFO0ODhz/IE4ZZd8OCqQWoRs363BQ0QOZi9KwpqpiEWo51S0kIXWqNicDPGXwpt9pQ==",
"source": "/mnt/e/dev/git.stella-ops.org/local-nugets"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>Microsoft.Extensions.Options</id>
<version>10.0.0-rc.2.25502.107</version>
<authors>Microsoft</authors>
<license type="expression">MIT</license>
<licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
<icon>Icon.png</icon>
<readme>PACKAGE.md</readme>
<projectUrl>https://dot.net/</projectUrl>
<description>Provides a strongly typed way of specifying and accessing settings using dependency injection.</description>
<releaseNotes>https://go.microsoft.com/fwlink/?LinkID=799421</releaseNotes>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<serviceable>true</serviceable>
<repository type="git" url="https://github.com/dotnet/dotnet" commit="89c8f6a112d37d2ea8b77821e56d170a1bccdc5a" />
<dependencies>
<group targetFramework=".NETFramework4.6.2">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="System.ValueTuple" version="4.6.1" exclude="Build,Analyzers" />
</group>
<group targetFramework="net8.0">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
</group>
<group targetFramework="net9.0">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
</group>
<group targetFramework="net10.0">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
</group>
<group targetFramework=".NETStandard2.0">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="System.ComponentModel.Annotations" version="5.0.0" exclude="Build,Analyzers" />
</group>
<group targetFramework=".NETStandard2.1">
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="Microsoft.Extensions.Primitives" version="10.0.0-rc.2.25502.107" exclude="Build,Analyzers" />
<dependency id="System.ComponentModel.Annotations" version="5.0.0" exclude="Build,Analyzers" />
</group>
</dependencies>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations" targetFramework=".NETFramework4.6.2" />
</frameworkAssemblies>
</metadata>
</package>

View File

@@ -0,0 +1,170 @@
## 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
```C#
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
```C#
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;
}
}
```
#### Options Validation Source Generator Example
```C#
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();
}
```
## 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
* [Conceptual documentation](https://learn.microsoft.com/aspnet/core/fundamentals/configuration/options)
* [API documentation](https://learn.microsoft.com/dotnet/api/microsoft.extensions.options)
## Related Packages
[Microsoft.Extensions.Logging](https://www.nuget.org/packages/Microsoft.Extensions.Logging)
[Microsoft.Extensions.Configuration](https://www.nuget.org/packages/Microsoft.Extensions.Configuration)
## Feedback & Contributing
Microsoft.Extensions.Options is released as open source under the [MIT license](https://licenses.nuget.org/MIT). Bug reports and contributions are welcome at [the GitHub repository](https://github.com/dotnet/runtime).

View File

@@ -0,0 +1,6 @@
<Project InitialTargets="NETStandardCompatError_Microsoft_Extensions_Options_net462">
<Target Name="NETStandardCompatError_Microsoft_Extensions_Options_net462"
Condition="'$(SuppressTfmSupportBuildWarnings)' == ''">
<Warning Text="Microsoft.Extensions.Options 10.0.0-rc.2.25502.107 doesn't support $(TargetFramework) and has not been tested with it. Consider upgrading your TargetFramework to net462 or later. You may also set &lt;SuppressTfmSupportBuildWarnings&gt;true&lt;/SuppressTfmSupportBuildWarnings&gt; in the project file to ignore this warning and attempt to run in this unsupported configuration at your own risk." />
</Target>
</Project>

View File

@@ -0,0 +1,31 @@
<Project>
<Target Name="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<_Microsoft_Extensions_OptionsAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'Microsoft.Extensions.Options'" />
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsAnalyzerMultiTargeting"
Condition="'$(SupportsRoslynComponentVersioning)' != 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<!-- Remove our analyzers targeting roslyn4.x -->
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)"
Condition="$([System.String]::Copy('%(_Microsoft_Extensions_OptionsAnalyzer.Identity)').IndexOf('roslyn4')) &gt;= 0"/>
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsRemoveAnalyzers"
Condition="'$(DisableMicrosoftExtensionsOptionsSourceGenerator)' == 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<!-- Remove all our analyzers -->
<ItemGroup>
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)" />
</ItemGroup>
</Target>
</Project>

View File

@@ -0,0 +1,31 @@
<Project>
<Target Name="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<_Microsoft_Extensions_OptionsAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'Microsoft.Extensions.Options'" />
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsAnalyzerMultiTargeting"
Condition="'$(SupportsRoslynComponentVersioning)' != 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<!-- Remove our analyzers targeting roslyn4.x -->
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)"
Condition="$([System.String]::Copy('%(_Microsoft_Extensions_OptionsAnalyzer.Identity)').IndexOf('roslyn4')) &gt;= 0"/>
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsRemoveAnalyzers"
Condition="'$(DisableMicrosoftExtensionsOptionsSourceGenerator)' == 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<!-- Remove all our analyzers -->
<ItemGroup>
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)" />
</ItemGroup>
</Target>
</Project>

View File

@@ -0,0 +1,6 @@
<Project InitialTargets="NETStandardCompatError_Microsoft_Extensions_Options_net8_0">
<Target Name="NETStandardCompatError_Microsoft_Extensions_Options_net8_0"
Condition="'$(SuppressTfmSupportBuildWarnings)' == ''">
<Warning Text="Microsoft.Extensions.Options 10.0.0-rc.2.25502.107 doesn't support $(TargetFramework) and has not been tested with it. Consider upgrading your TargetFramework to net8.0 or later. You may also set &lt;SuppressTfmSupportBuildWarnings&gt;true&lt;/SuppressTfmSupportBuildWarnings&gt; in the project file to ignore this warning and attempt to run in this unsupported configuration at your own risk." />
</Target>
</Project>

View File

@@ -0,0 +1,31 @@
<Project>
<Target Name="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<_Microsoft_Extensions_OptionsAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'Microsoft.Extensions.Options'" />
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsAnalyzerMultiTargeting"
Condition="'$(SupportsRoslynComponentVersioning)' != 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<ItemGroup>
<!-- Remove our analyzers targeting roslyn4.x -->
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)"
Condition="$([System.String]::Copy('%(_Microsoft_Extensions_OptionsAnalyzer.Identity)').IndexOf('roslyn4')) &gt;= 0"/>
</ItemGroup>
</Target>
<Target Name="_Microsoft_Extensions_OptionsRemoveAnalyzers"
Condition="'$(DisableMicrosoftExtensionsOptionsSourceGenerator)' == 'true'"
AfterTargets="ResolvePackageDependenciesForBuild;ResolveNuGetPackageAssets"
DependsOnTargets="_Microsoft_Extensions_OptionsGatherAnalyzers">
<!-- Remove all our analyzers -->
<ItemGroup>
<Analyzer Remove="@(_Microsoft_Extensions_OptionsAnalyzer)" />
</ItemGroup>
</Target>
</Project>

View File

@@ -0,0 +1 @@
YtqwJ5LYO4otgwg4qexd5DbkGJxIS8zBF2v2Ac9SBnn8g0ipXlnfJN7cLdu7YrXFBPVKC6G22+zIB5+o3/hZUA==