I have the following but in order to use AddAzureKeyVault
I need to know the key vault name which is set in configuration. Is it possible to read in this value in one go or do I need to build it twice?
private static IConfigurationRoot GetIConfigurationRoot()
{
var root = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false)
//.AddAzureKeyVault($"https://{keyVaultName}.vault.azure.net")
.AddEnvironmentVariables()
.Build();
return root;
}
Not sure why do you add your configuration like that, but it is possible in with ConfigurationManager
for example :
var builder = WebApplication.CreateBuilder(args);
var connStringAzureKV= builder.Configuration.GetConnectionString("AzureKV");
builder.Configuration.AddAzureKeyVault(connStringAzureKV);
Or
var configurationManager = new ConfigurationManager();
configurationManager.SetBasePath(Directory.GetCurrentDirectory());
configurationManager.AddJsonFile("appsettings.json");
var connStringAzureKV = configurationManager.GetConnectionString("AzureKV");
configurationManager.AddAzureKeyVault(connStringAzureKV);
ConfigurationManager
implements both IConfigurationManager
and IConfigurationRoot
, so it should work in your case.
Not sure what kind of host are you building, but using the first example is always good option.
When you build your IConfigurationRoot
I don't see a way to add more configuration sources.
NOTE This is also valid:
public static IConfigurationRoot GetIConfigurationRoot()
{
var configurationManager = new ConfigurationManager();
configurationManager.SetBasePath(Directory.GetCurrentDirectory());
configurationManager.AddJsonFile("appsettings.json");
var connStringAzureKV = configurationManager.GetConnectionString("AzureKV");
configurationManager.AddAzureKeyVault(connStringAzureKV);
return configurationManager;
}
I used GetConnectionString
just for sake of example, you can get your configuration from every section in appsettings.json
.