Skip to content

Commit 92076c1

Browse files
use Lazy<T> to ensure lazy initialization
1 parent 7cb0654 commit 92076c1

2 files changed

Lines changed: 13 additions & 13 deletions

File tree

src/Microsoft.FeatureManagement/ConfigurationFeatureDefinitionProvider.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

tests/Tests.FeatureManagement/FeatureManagementTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public async Task ReadsTopLevelConfiguration()
9090

9191
IFeatureManager featureManager = serviceProvider.GetRequiredService<IFeatureManager>();
9292

93-
//Assert.True(await featureManager.IsEnabledAsync("FeatureX"));
93+
Assert.True(await featureManager.IsEnabledAsync("FeatureX"));
9494

9595
string json = @"
9696
{

0 commit comments

Comments
 (0)