Skip to content
Merged
Prev Previous commit
update reflection using nameof(Data)
  • Loading branch information
zhiyuanliang-ms committed May 29, 2025
commit 1770e0a3989d4e267b330a2de8c175c558009e6e
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;

Expand All @@ -23,7 +22,6 @@ public sealed class ConfigurationFeatureDefinitionProvider : IFeatureDefinitionP
//
// IFeatureDefinitionProviderCacheable interface is only used to mark this provider as cacheable. This allows our test suite's
// provider to be marked for caching as well.
private static readonly PropertyInfo _propertyInfo = typeof(ConfigurationProvider).GetProperty("Data", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
private readonly IConfiguration _configuration;
private IEnumerable<IConfigurationSection> _dotnetFeatureDefinitionSections;
private IEnumerable<IConfigurationSection> _microsoftFeatureDefinitionSections;
Expand Down Expand Up @@ -245,15 +243,13 @@ private void FindFeatureFlags(IConfiguration configuration, List<IConfigurationS

foreach (IConfigurationProvider provider in configurationRoot.Providers)
{
if (provider is ConfigurationProvider configProvider)
if (provider is ConfigurationProvider configurationProvider)
{
var data = _propertyInfo.GetValue(configProvider) as IDictionary<string, string>;

//
// Cannot use the original provider directly as its reload token is subscribed
var configurationProvider = new OnDemandConfigurationProvider(data);
var onDemandConfigurationProvider = new OnDemandConfigurationProvider(configurationProvider);

var onDemandConfigurationRoot = new ConfigurationRoot(new[] { configurationProvider });
var onDemandConfigurationRoot = new ConfigurationRoot(new[] { onDemandConfigurationProvider });

IConfigurationSection featureFlagsSection = onDemandConfigurationRoot
.GetSection(MicrosoftFeatureManagementFields.FeatureManagementSectionName)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
using System.Reflection;

namespace Microsoft.FeatureManagement
{
internal class OnDemandConfigurationProvider : ConfigurationProvider
{
public OnDemandConfigurationProvider(IDictionary<string, string> data)
private static readonly PropertyInfo _DataProperty = typeof(ConfigurationProvider).GetProperty(nameof(Data), BindingFlags.NonPublic | BindingFlags.Instance);

public OnDemandConfigurationProvider(ConfigurationProvider configurationProvider)
{
var data = _DataProperty.GetValue(configurationProvider) as IDictionary<string, string>;

Data = data;
}
}
Expand Down