Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using System;
using System.Collections.Generic;
using System.Security;
Expand Down Expand Up @@ -99,11 +100,11 @@ public static IServiceCollection AddAzureAppConfiguration(this IServiceCollectio
if (!_isProviderDisabled)
{
services.AddLogging();
services.AddSingleton<IConfigurationRefresherProvider, AzureAppConfigurationRefresherProvider>();
services.TryAddSingleton<IConfigurationRefresherProvider, AzureAppConfigurationRefresherProvider>();
}
else
{
services.AddSingleton<IConfigurationRefresherProvider, EmptyConfigurationRefresherProvider>();
services.TryAddSingleton<IConfigurationRefresherProvider, EmptyConfigurationRefresherProvider>();
}

return services;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,38 @@ internal class AzureAppConfigurationRefresherProvider : IConfigurationRefresherP
{
private static readonly PropertyInfo _propertyInfo = typeof(ChainedConfigurationProvider).GetProperty("Configuration", BindingFlags.Public | BindingFlags.Instance);

public IEnumerable<IConfigurationRefresher> Refreshers { get; }
private readonly IConfiguration _configuration;
private readonly ILoggerFactory _loggerFactory;
private IEnumerable<IConfigurationRefresher> _refreshers;
private bool _rediscoveredRefreshers = false;

public AzureAppConfigurationRefresherProvider(IConfiguration configuration, ILoggerFactory _loggerFactory)
public IEnumerable<IConfigurationRefresher> Refreshers
{
var configurationRoot = configuration as IConfigurationRoot;
get
{
// Ensure latest refreshers are discovered if the configuration has changed since the constructor was called
if (!_rediscoveredRefreshers)
{
_refreshers = DiscoverRefreshers();

_rediscoveredRefreshers = true;
}

return _refreshers;
}
}

public AzureAppConfigurationRefresherProvider(IConfiguration configuration, ILoggerFactory loggerFactory)
{
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
_loggerFactory = loggerFactory;

_refreshers = DiscoverRefreshers();
}

private IEnumerable<IConfigurationRefresher> DiscoverRefreshers()
{
var configurationRoot = _configuration as IConfigurationRoot;
var refreshers = new List<IConfigurationRefresher>();

FindRefreshers(configurationRoot, _loggerFactory, refreshers);
Expand All @@ -27,7 +54,7 @@ public AzureAppConfigurationRefresherProvider(IConfiguration configuration, ILog
throw new InvalidOperationException("Unable to access the Azure App Configuration provider. Please ensure that it has been configured correctly.");
}

Refreshers = refreshers;
return refreshers;
}

private void FindRefreshers(IConfigurationRoot configurationRoot, ILoggerFactory loggerFactory, List<IConfigurationRefresher> refreshers)
Expand Down