{"record":{"id":"2f5515d05237f00c","repo":"microsoft/aspire","slug":"resource-must-be-a-cosmos-db-storage-container-registry-or","errorCode":null,"errorMessage":"Resource must be a Cosmos DB, Storage, Container Registry, or Key Vault resource builder.","messagePattern":"Resource must be a Cosmos DB, Storage, Container Registry, or Key Vault resource builder\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Foundry/Project/ConnectionBuilderExtensions.cs","lineNumber":356,"sourceCode":"    internal static IResourceBuilder<AzureCognitiveServicesProjectConnectionResource> AddConnectionForPolyglot(\n        this IResourceBuilder<AzureCognitiveServicesProjectResource> builder,\n        [AspireUnion(\n            typeof(IResourceBuilder<AzureCosmosDBResource>),\n            typeof(IResourceBuilder<AzureStorageResource>),\n            typeof(IResourceBuilder<AzureContainerRegistryResource>),\n            typeof(IResourceBuilder<AzureKeyVaultResource>))]\n        object resource)\n    {\n        ArgumentNullException.ThrowIfNull(builder);\n        ArgumentNullException.ThrowIfNull(resource);\n\n        return resource switch\n        {\n            IResourceBuilder<AzureCosmosDBResource> cosmosDb => builder.AddConnection(cosmosDb),\n            IResourceBuilder<AzureStorageResource> storage => builder.AddConnection(storage),\n            IResourceBuilder<AzureContainerRegistryResource> registry => builder.AddConnection(registry),\n            IResourceBuilder<AzureKeyVaultResource> keyVault => builder.AddConnection(keyVault),\n            _ => throw new ArgumentException(\n                \"Resource must be a Cosmos DB, Storage, Container Registry, or Key Vault resource builder.\",\n                nameof(resource))\n        };\n    }\n\n    /// <summary>\n    /// Adds a Grounding with Bing Search connection to a Microsoft Foundry project.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// The Bing Search resource (<c>Microsoft.Bing/accounts</c>) cannot be provisioned through Aspire\n    /// or Bicep. It must be created manually in the\n    /// <a href=\"https://portal.azure.com\">Azure portal</a>.\n    /// </para>\n    /// <para>\n    /// Once the Bing resource exists, pass its resource ID to this method. The connection is\n    /// created in the Foundry project using API key authentication with\n    /// <c>category: \"ApiKey\"</c> and <c>metadata.Type: \"bing_grounding\"</c>.","sourceCodeStart":338,"sourceCodeEnd":374,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Foundry/Project/ConnectionBuilderExtensions.cs#L338-L374","documentation":"AddConnectionForPolyglot dispatches to typed AddConnection overloads for Cosmos DB, Storage, Container Registry, and Key Vault resource builders only. Any other resource builder type falls into the default case and raises this ArgumentException naming the offending 'resource' parameter.","triggerScenarios":"Calling foundryProject.AddConnectionForPolyglot(builder) with an IResourceBuilder for a resource other than AzureCosmosDBResource, AzureStorageResource, AzureContainerRegistryResource, or AzureKeyVaultResource (e.g. a Redis, SQL, or custom resource builder).","commonSituations":"Assuming any Azure resource can become a Foundry connection; passing a generic IResourceBuilder<IResource>; typos in the builder variable.","solutions":["Pass one of the supported builders: Cosmos DB, Storage, Container Registry, or Key Vault.","For other resource types, create the Foundry connection manually via the lower-level AddConnection(name, configureInfrastructure) API with appropriate connection properties.","Check the ConnectionBuilderExtensions docs for the supported connection resource list."],"exampleFix":"// before\nproject.AddConnectionForPolyglot(builder.AddRedis(\"cache\")); // throws\n\n// after\nproject.AddConnectionForPolyglot(builder.AddAzureKeyVault(\"kv\")); // supported type","handlingStrategy":"type-guard","validationCode":"bool supported = resource is IResourceBuilder<AzureCosmosDBResource>\n    or IResourceBuilder<AzureStorageResource>\n    or IResourceBuilder<AzureContainerRegistryResource>\n    or IResourceBuilder<AzureKeyVaultResource>;","typeGuard":"static bool IsSupportedConnectionBuilder(IResourceBuilder<IResource> b) =>\n    b is IResourceBuilder<AzureCosmosDBResource>\n      or IResourceBuilder<AzureStorageResource>\n      or IResourceBuilder<AzureContainerRegistryResource>\n      or IResourceBuilder<AzureKeyVaultResource>;","tryCatchPattern":"try { project.AddConnectionForPolyglot(resource); } catch (ArgumentException ex) when (ex.Message.Contains(\"Cosmos DB, Storage, Container Registry, or Key Vault\")) { /* use supported resource or manual AddConnection */ }","preventionTips":["Only pass resource builders from the supported Azure resource set.","Use the strongly typed AddConnection overloads directly to get compile-time checks.","For other resource types, use the low-level AddConnection(name, configureInfrastructure) API."],"tags":["azure-ai-foundry","aspire-hosting","argument","connection"],"backgroundTag":"invalid-argument-value","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T09:17:21.228Z"}