-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Give the users the ability to have control over ConfigurationClient i…
…nstance(s) used by the provider (#598) * Introduced a new `AzureAppConfigurationClientFactory` class to handle the creation of `ConfigurationClient` instances * remove clients dictionary since we will not have hits and clients are already stored in ConfigurationClientManager * revert * add license + remove unused usings * ran dotnet format * add capability of fallback to different stores * add explicit type * address comments * remove scheme validation --------- Co-authored-by: Sami Sadfa <[email protected]>
- Loading branch information
Showing
6 changed files
with
128 additions
and
79 deletions.
There are no files selected for viewing
74 changes: 74 additions & 0 deletions
74
...soft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationClientFactory.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT license. | ||
// | ||
using Azure.Core; | ||
using Azure.Data.AppConfiguration; | ||
using Microsoft.Extensions.Azure; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
|
||
namespace Microsoft.Extensions.Configuration.AzureAppConfiguration | ||
{ | ||
internal class AzureAppConfigurationClientFactory : IAzureClientFactory<ConfigurationClient> | ||
{ | ||
private readonly ConfigurationClientOptions _clientOptions; | ||
|
||
private readonly TokenCredential _credential; | ||
private readonly IEnumerable<string> _connectionStrings; | ||
|
||
public AzureAppConfigurationClientFactory( | ||
IEnumerable<string> connectionStrings, | ||
ConfigurationClientOptions clientOptions) | ||
{ | ||
if (connectionStrings == null || !connectionStrings.Any()) | ||
{ | ||
throw new ArgumentNullException(nameof(connectionStrings)); | ||
} | ||
|
||
_connectionStrings = connectionStrings; | ||
|
||
_clientOptions = clientOptions ?? throw new ArgumentNullException(nameof(clientOptions)); | ||
} | ||
|
||
public AzureAppConfigurationClientFactory( | ||
TokenCredential credential, | ||
ConfigurationClientOptions clientOptions) | ||
{ | ||
_credential = credential ?? throw new ArgumentNullException(nameof(credential)); | ||
_clientOptions = clientOptions ?? throw new ArgumentNullException(nameof(clientOptions)); | ||
} | ||
|
||
public ConfigurationClient CreateClient(string endpoint) | ||
{ | ||
if (string.IsNullOrEmpty(endpoint)) | ||
{ | ||
throw new ArgumentNullException(nameof(endpoint)); | ||
} | ||
|
||
if (!Uri.TryCreate(endpoint, UriKind.Absolute, out Uri uriResult)) | ||
{ | ||
throw new ArgumentException("Invalid host URI."); | ||
} | ||
|
||
if (_credential != null) | ||
{ | ||
return new ConfigurationClient(uriResult, _credential, _clientOptions); | ||
} | ||
|
||
string connectionString = _connectionStrings.FirstOrDefault(cs => ConnectionStringUtils.Parse(cs, ConnectionStringUtils.EndpointSection) == endpoint); | ||
|
||
// | ||
// falback to the first connection string | ||
if (connectionString == null) | ||
{ | ||
string id = ConnectionStringUtils.Parse(_connectionStrings.First(), ConnectionStringUtils.IdSection); | ||
string secret = ConnectionStringUtils.Parse(_connectionStrings.First(), ConnectionStringUtils.SecretSection); | ||
|
||
connectionString = ConnectionStringUtils.Build(uriResult, id, secret); | ||
} | ||
|
||
return new ConfigurationClient(connectionString, _clientOptions); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters