public async void HandlesConfigurationChanges()
        {
            // Arrange
            const string secretName   = "hello i'm a secret";
            const string firstSecret  = "secret1";
            const string secondSecret = "secret2";

            var arguments = new Dictionary <string, string>
            {
                { secretName, firstSecret }
            };

            ConfigurationProvider configProvider = new DictionaryConfigurationProvider(arguments);

            // Act
            var value1 = await configProvider.GetOrThrowAsync <string>(secretName);

            var value2 = await configProvider.GetOrDefaultAsync <string>(secretName);

            // Assert
            Assert.Equal(firstSecret, value1);
            Assert.Equal(value1, value2);

            // Arrange 2
            arguments[secretName] = secondSecret;

            // Act 2
            value1 = await configProvider.GetOrThrowAsync <string>(secretName);

            value2 = await configProvider.GetOrDefaultAsync <string>(secretName);

            // Assert 2
            Assert.Equal(secondSecret, value1);
            Assert.Equal(value1, value2);
        }
        public async void ThrowsForUnsupportedConversion()
        {
            // Arrange
            const string secretName = "hello i'm a secret";
            const string secretKey  = "fetch me from KeyVault pls";

            var arguments = new Dictionary <string, string>
            {
                { secretName, secretKey }
            };

            ConfigurationProvider configProvider = new DictionaryConfigurationProvider(arguments);

            // Assert
            await Assert.ThrowsAsync <NotSupportedException>(
                async() => await configProvider.GetOrThrowAsync <NoConversionFromStringToThisClass>(secretName));
        }