/// <summary> /// Creates the vault management instance based on provided Vaults Config dictionary /// </summary> /// <param name="vaultsConfig">Vaults Config dictionary</param> /// <param name="accessType">ReadOnly or ReadWrite</param> /// <param name="vaultNames">Single or Dual</param> public Vault(VaultsConfig vaultsConfig, VaultAccessTypeEnum accessType, params string[] vaultNames) { Guard.ArgumentNotNull(vaultsConfig, nameof(vaultsConfig)); Guard.ArgumentCollectionNotEmpty(vaultNames, nameof(vaultNames)); VaultsConfig = vaultsConfig; VaultNames = (from v in vaultNames where !string.IsNullOrEmpty(v) select v).ToArray(); switch (VaultNames.Length) { case 1: _keyVaultClients = new KeyVaultClientEx[1] { CreateKeyVaultClientEx(accessType, VaultNames[0]), }; break; case 2: string primaryVaultName = VaultNames[0]; string secondaryVaultName = VaultNames[1]; if (0 == string.Compare(primaryVaultName, secondaryVaultName, true)) { throw new ArgumentException($"Primary vault name {primaryVaultName} is equal to secondary vault name {secondaryVaultName}"); } _keyVaultClients = new KeyVaultClientEx[2] { CreateKeyVaultClientEx(accessType, primaryVaultName), CreateKeyVaultClientEx(accessType, secondaryVaultName), }; break; default: throw new ArgumentException($"Vault names length must be 1 or 2 only", nameof(VaultNames)); } }