Remora.Extensions.Options.Immutable 1.0.8

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
dotnet add package Remora.Extensions.Options.Immutable --version 1.0.8
NuGet\Install-Package Remora.Extensions.Options.Immutable -Version 1.0.8
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Remora.Extensions.Options.Immutable" Version="1.0.8" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Remora.Extensions.Options.Immutable --version 1.0.8
#r "nuget: Remora.Extensions.Options.Immutable, 1.0.8"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Remora.Extensions.Options.Immutable as a Cake Addin
#addin nuget:?package=Remora.Extensions.Options.Immutable&version=1.0.8

// Install Remora.Extensions.Options.Immutable as a Cake Tool
#tool nuget:?package=Remora.Extensions.Options.Immutable&version=1.0.8

Remora.Extensions.Options.Immutable

This package provides an extension to Microsoft.Extensions.Options, allowing the use of immutable types (such as records) in the options ecosystem.

The extension takes a simple and direct approach to integration with the existing Microsoft-provided extension, adding only the minimal API necessary to achieve feature parity.

Usage

Usage is simple - immutable option types may be configured in a practically identical manner to mutable types, provided one of the following conditions are true:

  • The type defines a parameterless constructor
  • The type defines a constructor where all arguments are optional
  • The type is explicitly initialized with a root state

That is, given the following types,

public record ExplicitOptions(string Value, bool Flag);
public record ParameterlessOptions()
{
    public string? Value { get; init; }
}
public record AllOptionalOptions(string Value = "initial", bool Flag = true");

they may be utilized in the following manner:

var services = new ServiceCollection()
    .Configure(() => new ExplicitOptions("initial", true))
    .Configure<ExplicitOptions>(opt => opt with { Flag = false });

var services = new ServiceCollection()
    .Configure<ParameterlessOptions>(opt => opt with { Value = "configured" });

var services = new ServiceCollection()
    .Configure<AllOptionalOptions>(opt => opt with { Flag = false });

All the various normal configuration calls, such as Configure, PostConfigure, ConfigureAll, and PostConfigureAll (along with their named) variants are supported.

Installation

Get it on NuGet!

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 is compatible.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Remora.Extensions.Options.Immutable:

Package Downloads
Remora.Discord.Gateway The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Remora.Discord's implementation of a Discord gateway client

Remora.Discord.Commands The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Glue code for using Remora.Commands with Remora.Discord

Remora.Discord.Hosting The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Implementation of a hosted Discord gateway service for the .NET Generic Host

Remora.Plugins The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

The default implementation of Remora.Plugins.Abstractions.

Coca.Remora.Valour

The glue between Valour.Api and Remora.Commands

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Remora.Extensions.Options.Immutable:

Repository Stars
Remora/Remora.Discord
A data-oriented C# Discord library, focused on high-performance concurrency and robust design.
Version Downloads Last updated
1.0.8 16,130 11/20/2023
1.0.7 109 11/14/2023
1.0.6 96,919 11/20/2022
1.0.5 306 11/20/2022
1.0.4 26,332 8/19/2022
1.0.3 50,479 4/19/2022
1.0.2 21,462 2/13/2022
1.0.1 60,457 9/30/2021
1.0.0 12,693 8/9/2021

Upgrade dependencies.