@@ -23,8 +23,8 @@ public sealed class ConfigurationFeatureDefinitionProvider : IFeatureDefinitionP
2323 // IFeatureDefinitionProviderCacheable interface is only used to mark this provider as cacheable. This allows our test suite's
2424 // provider to be marked for caching as well.
2525 private readonly IConfiguration _configuration ;
26- private IEnumerable < IConfigurationSection > _dotnetFeatureDefinitionSections ;
27- private IEnumerable < IConfigurationSection > _microsoftFeatureDefinitionSections ;
26+ private Lazy < IEnumerable < IConfigurationSection > > _dotnetFeatureDefinitionSections ;
27+ private Lazy < IEnumerable < IConfigurationSection > > _microsoftFeatureDefinitionSections ;
2828 private readonly ConcurrentDictionary < string , Task < FeatureDefinition > > _definitions ;
2929 private IDisposable _changeSubscription ;
3030 private int _stale = 0 ;
@@ -50,9 +50,9 @@ public ConfigurationFeatureDefinitionProvider(IConfiguration configuration)
5050 return Task . FromResult ( GetMicrosoftSchemaFeatureDefinition ( featureName ) ?? GetDotnetSchemaFeatureDefinition ( featureName ) ) ;
5151 } ;
5252
53- _dotnetFeatureDefinitionSections = GetDotnetFeatureDefinitionSections ( ) ;
53+ _dotnetFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetDotnetFeatureDefinitionSections ) ;
5454
55- _microsoftFeatureDefinitionSections = GetMicrosoftFeatureDefinitionSections ( ) ;
55+ _microsoftFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetMicrosoftFeatureDefinitionSections ) ;
5656 }
5757
5858 /// <summary>
@@ -96,9 +96,9 @@ public Task<FeatureDefinition> GetFeatureDefinitionAsync(string featureName)
9696 {
9797 _definitions . Clear ( ) ;
9898
99- _dotnetFeatureDefinitionSections = GetDotnetFeatureDefinitionSections ( ) ;
99+ _dotnetFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetDotnetFeatureDefinitionSections ) ;
100100
101- _microsoftFeatureDefinitionSections = GetMicrosoftFeatureDefinitionSections ( ) ;
101+ _microsoftFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetMicrosoftFeatureDefinitionSections ) ;
102102 }
103103
104104 return _definitions . GetOrAdd ( featureName , _getFeatureDefinitionFunc ) ;
@@ -119,12 +119,12 @@ public async IAsyncEnumerable<FeatureDefinition> GetAllFeatureDefinitionsAsync()
119119 {
120120 _definitions . Clear ( ) ;
121121
122- _dotnetFeatureDefinitionSections = GetDotnetFeatureDefinitionSections ( ) ;
122+ _dotnetFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetDotnetFeatureDefinitionSections ) ;
123123
124- _microsoftFeatureDefinitionSections = GetMicrosoftFeatureDefinitionSections ( ) ;
124+ _microsoftFeatureDefinitionSections = new Lazy < IEnumerable < IConfigurationSection > > ( GetMicrosoftFeatureDefinitionSections ) ;
125125 }
126126
127- foreach ( IConfigurationSection featureSection in _microsoftFeatureDefinitionSections )
127+ foreach ( IConfigurationSection featureSection in _microsoftFeatureDefinitionSections . Value )
128128 {
129129 string featureName = featureSection [ MicrosoftFeatureManagementFields . Id ] ;
130130
@@ -143,7 +143,7 @@ public async IAsyncEnumerable<FeatureDefinition> GetAllFeatureDefinitionsAsync()
143143 }
144144 }
145145
146- foreach ( IConfigurationSection featureSection in _dotnetFeatureDefinitionSections )
146+ foreach ( IConfigurationSection featureSection in _dotnetFeatureDefinitionSections . Value )
147147 {
148148 string featureName = featureSection . Key ;
149149
@@ -165,7 +165,7 @@ public async IAsyncEnumerable<FeatureDefinition> GetAllFeatureDefinitionsAsync()
165165
166166 private FeatureDefinition GetDotnetSchemaFeatureDefinition ( string featureName )
167167 {
168- IConfigurationSection dotnetFeatureDefinitionConfiguration = _dotnetFeatureDefinitionSections
168+ IConfigurationSection dotnetFeatureDefinitionConfiguration = _dotnetFeatureDefinitionSections . Value
169169 . FirstOrDefault ( section =>
170170 string . Equals ( section . Key , featureName , StringComparison . OrdinalIgnoreCase ) ) ;
171171
@@ -179,7 +179,7 @@ private FeatureDefinition GetDotnetSchemaFeatureDefinition(string featureName)
179179
180180 private FeatureDefinition GetMicrosoftSchemaFeatureDefinition ( string featureName )
181181 {
182- IConfigurationSection microsoftFeatureDefinitionConfiguration = _microsoftFeatureDefinitionSections
182+ IConfigurationSection microsoftFeatureDefinitionConfiguration = _microsoftFeatureDefinitionSections . Value
183183 . LastOrDefault ( section =>
184184 string . Equals ( section [ MicrosoftFeatureManagementFields . Id ] , featureName , StringComparison . OrdinalIgnoreCase ) ) ;
185185
0 commit comments