From 40474ac13479a7b4a69f18afefb7dfc2d4a0c086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D0=BD=D0=B8=D0=BD=20=D0=A1=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Mon, 24 Aug 2026 23:37:05 +0300 Subject: [PATCH 1/2] feat(variants): allow in-memory objects --- src/Microsoft.FeatureManagement/FeatureManager.cs | 5 +++-- src/Microsoft.FeatureManagement/Variant.cs | 6 ++++++ src/Microsoft.FeatureManagement/VariantDefinition.cs | 8 ++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.FeatureManagement/FeatureManager.cs b/src/Microsoft.FeatureManagement/FeatureManager.cs index f7bca84a..a6ebed3c 100644 --- a/src/Microsoft.FeatureManagement/FeatureManager.cs +++ b/src/Microsoft.FeatureManagement/FeatureManager.cs @@ -847,10 +847,11 @@ private Variant GetVariantFromVariantDefinition(VariantDefinition variantDefinit variantConfiguration = variantDefinition.ConfigurationValue; } - return new Variant() + return new Variant { Name = variantDefinition.Name, - Configuration = variantConfiguration + Configuration = variantConfiguration, + ConfigurationObject = variantDefinition.ConfigurationObject, }; } } diff --git a/src/Microsoft.FeatureManagement/Variant.cs b/src/Microsoft.FeatureManagement/Variant.cs index f69a47ce..012b5f3b 100644 --- a/src/Microsoft.FeatureManagement/Variant.cs +++ b/src/Microsoft.FeatureManagement/Variant.cs @@ -19,5 +19,11 @@ public class Variant /// The configuration of the variant. /// public IConfigurationSection Configuration { get; set; } + + /// + /// The configuration of the variant. + /// When set, variants should prefer this over . + /// + public object ConfigurationObject { get; set; } } } diff --git a/src/Microsoft.FeatureManagement/VariantDefinition.cs b/src/Microsoft.FeatureManagement/VariantDefinition.cs index 138d2fc5..0b8b0a3e 100644 --- a/src/Microsoft.FeatureManagement/VariantDefinition.cs +++ b/src/Microsoft.FeatureManagement/VariantDefinition.cs @@ -21,6 +21,14 @@ public class VariantDefinition /// public IConfigurationSection ConfigurationValue { get; set; } + /// + /// A parameter object that can be used as an alternative to . + /// Custom implementations can populate this property directly + /// instead of constructing an instance. + /// When set, variants should prefer this over . + /// + public object ConfigurationObject { get; set; } + /// /// Overrides the state of the feature if this variant has been assigned. /// From 90fe16e4af3ff3fe91659190b9aa7469733d35dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D0=BD=D0=B8=D0=BD=20=D0=A1=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Mon, 24 Aug 2026 23:42:01 +0300 Subject: [PATCH 2/2] docs(variants): allow in-memory objects --- src/Microsoft.FeatureManagement/VariantDefinition.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.FeatureManagement/VariantDefinition.cs b/src/Microsoft.FeatureManagement/VariantDefinition.cs index 0b8b0a3e..b26fb13e 100644 --- a/src/Microsoft.FeatureManagement/VariantDefinition.cs +++ b/src/Microsoft.FeatureManagement/VariantDefinition.cs @@ -22,7 +22,7 @@ public class VariantDefinition public IConfigurationSection ConfigurationValue { get; set; } /// - /// A parameter object that can be used as an alternative to . + /// A configuration object that can be used as an alternative to . /// Custom implementations can populate this property directly /// instead of constructing an instance. /// When set, variants should prefer this over .