@@ -13,11 +13,38 @@ internal class AzureAppConfigurationRefresherProvider : IConfigurationRefresherP
1313 {
1414 private static readonly PropertyInfo _propertyInfo = typeof ( ChainedConfigurationProvider ) . GetProperty ( "Configuration" , BindingFlags . Public | BindingFlags . Instance ) ;
1515
16- public IEnumerable < IConfigurationRefresher > Refreshers { get ; }
16+ private readonly IConfiguration _configuration ;
17+ private readonly ILoggerFactory _loggerFactory ;
18+ private IEnumerable < IConfigurationRefresher > _refreshers ;
19+ private bool _rediscoveredRefreshers = false ;
1720
18- public AzureAppConfigurationRefresherProvider ( IConfiguration configuration , ILoggerFactory _loggerFactory )
21+ public IEnumerable < IConfigurationRefresher > Refreshers
1922 {
20- var configurationRoot = configuration as IConfigurationRoot ;
23+ get
24+ {
25+ // Ensure latest refreshers are discovered if the configuration has changed since the constructor was called
26+ if ( ! _rediscoveredRefreshers )
27+ {
28+ _refreshers = DiscoverRefreshers ( ) ;
29+
30+ _rediscoveredRefreshers = true ;
31+ }
32+
33+ return _refreshers ;
34+ }
35+ }
36+
37+ public AzureAppConfigurationRefresherProvider ( IConfiguration configuration , ILoggerFactory loggerFactory )
38+ {
39+ _configuration = configuration ?? throw new ArgumentNullException ( nameof ( configuration ) ) ;
40+ _loggerFactory = loggerFactory ;
41+
42+ _refreshers = DiscoverRefreshers ( ) ;
43+ }
44+
45+ private IEnumerable < IConfigurationRefresher > DiscoverRefreshers ( )
46+ {
47+ var configurationRoot = _configuration as IConfigurationRoot ;
2148 var refreshers = new List < IConfigurationRefresher > ( ) ;
2249
2350 FindRefreshers ( configurationRoot , _loggerFactory , refreshers ) ;
@@ -27,7 +54,7 @@ public AzureAppConfigurationRefresherProvider(IConfiguration configuration, ILog
2754 throw new InvalidOperationException ( "Unable to access the Azure App Configuration provider. Please ensure that it has been configured correctly." ) ;
2855 }
2956
30- Refreshers = refreshers ;
57+ return refreshers ;
3158 }
3259
3360 private void FindRefreshers ( IConfigurationRoot configurationRoot , ILoggerFactory loggerFactory , List < IConfigurationRefresher > refreshers )
0 commit comments