Skip to content

IOptionsMonitor doesn't work dinamically with Azure AppConfiguration #52485

Open
@jonnovaretti

Description

@jonnovaretti

I'm trying to use IOptionsMonitor for dinamic configuration with Azure AppConfiguration, the values are loaded correctly on starting the application. After started, when I update any settings on Azure App Configuration portal, the settings values keep the same.

I've already used App Configuration in a function and it works properly, but nowadays I'm using WebHostedService DotNetCore.

        public static void Main()
        {
            var host = CreateHostBuilder().Build();            
            host.Run();
        }

        public static IHostBuilder CreateHostBuilder()
        {
            var host = Host.CreateDefaultBuilder()
                 .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var configuration = config.Build();

                    config.AddAzureAppConfiguration(options =>
                    {
                        options.Connect(configuration["ConnectionStrings:AppConfiguration"])
                               .UseFeatureFlags()
                               .ConfigureRefresh(refresh =>
                               {
                                   refresh.Register("RetryPolicyConfig:IntervalSecs", true);
                                   refresh.Register("RetryPolicyConfig:RetryCount", true);
                                   refresh.SetCacheExpiration(new TimeSpan(30, 0, 0));
                               });

                        _refresher = options.GetRefresher();
                    });
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureServices((w, s) => { s.AddSingleton(_refresher); });
                });

            return host;
        }

the IOptionsMonitor is inject in service class

        private readonly RetryPolicyConfig retryPolicyConfig;
        private readonly IConfigurationRefresher _refresher;

        public Service(IOptionsMonitor<RetryPolicyConfig> configuration, IConfigurationRefresher refresher)
        {
            this.configuration = configuration;
            retryPolicyConfig = configuration.CurrentValue;
        }

        public async Task Execute(Commmand command)
        {
            try
            {
                await _refresher.TryRefreshAsync();
                var retryPolicy = retryPolicyConfig.RetryCount;
                var secs = retryPolicyConfig.IntervalExponentialEachRetryInSecs; //nothing happens here after updating setting by AppConfiguration

Any idea?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions