{"record":{"id":"40785517d3ab6c64","repo":"microsoft/aspire","slug":"object-value-cannot-be-null-argumentnullexception-parent","errorCode":null,"errorMessage":"Object value cannot be null (ArgumentNullException: parent)","messagePattern":"Object value cannot be null \\(ArgumentNullException: parent\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure.ConnectorNamespace/AzureConnectorNamespaceConnectionAccessPolicyResource.cs","lineNumber":37,"sourceCode":"\n    private AzureConnectorNamespaceConnectionAccessPolicyResource(\n        string name,\n        string policyName,\n        AzureConnectorNamespaceConnectionResource parent,\n        string objectId,\n        string tenantId,\n        AzureUserAssignedIdentityResource? identityResource)\n        : base(name)\n    {\n        ArgumentException.ThrowIfNullOrWhiteSpace(policyName);\n        if (identityResource is null)\n        {\n            ArgumentException.ThrowIfNullOrWhiteSpace(objectId);\n            ArgumentException.ThrowIfNullOrWhiteSpace(tenantId);\n        }\n\n        PolicyName = policyName;\n        Parent = parent ?? throw new ArgumentNullException(nameof(parent));\n        ObjectId = objectId;\n        TenantId = tenantId;\n        IdentityResource = identityResource;\n        BicepIdentifier = name;\n    }\n\n    public string PolicyName { get; }\n\n    public string ObjectId { get; }\n\n    public string TenantId { get; }\n\n    public AzureConnectorNamespaceConnectionResource Parent { get; }\n\n    public AzureUserAssignedIdentityResource? IdentityResource { get; }\n\n    public string BicepIdentifier { get; }\n","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure.ConnectorNamespace/AzureConnectorNamespaceConnectionAccessPolicyResource.cs#L19-L55","documentation":"The AzureConnectorNamespaceConnectionAccessPolicyResource constructor requires a non-null parent Connector Namespace resource and throws ArgumentNullException when parent is null. The parent is needed to derive the Bicep identifier and model the access policy as a child of the namespace.","triggerScenarios":"Constructing AzureConnectorNamespaceConnectionAccessPolicyResource directly with a null parent argument, e.g. passing an uninitialized resource builder's Resource or a variable that was never assigned.","commonSituations":"Hand-authoring Bicep/provisioning model code instead of using the WithAccessPolicy extension; refactoring that moved resource creation before the namespace resource was built; nullability warnings suppressed with null-forgiving operators.","solutions":["Create access policies via the WithAccessPolicy extension on the Connector Namespace builder instead of constructing the resource directly","Ensure the parent AzureConnectorNamespaceResource is built (AddAzureConnectorNamespace) before creating access policies","Remove null-forgiving (!) operators and let the compiler flag the null parent"],"exampleFix":"// before\nvar policy = new AzureConnectorNamespaceConnectionAccessPolicyResource(name, null!, objectId, tenantId, identityResource);\n// after\nvar ns = builder.AddAzureConnectorNamespace(\"ns\");\nns.WithAccessPolicy(...); // parent supplied automatically","handlingStrategy":"validation","validationCode":"if (parent is null) throw new InvalidOperationException(\"Build the Connector Namespace resource before creating access policies.\");","typeGuard":"bool canCreate = parent is not null;","tryCatchPattern":"try { new AzureConnectorNamespaceConnectionAccessPolicyResource(...); } catch (ArgumentNullException ex) when (ex.ParamName == \"parent\") { /* fall back to WithAccessPolicy extension */ }","preventionTips":["Prefer WithAccessPolicy extensions over direct resource construction","Enable nullable reference types and avoid null-forgiving operators","Construct policies only after AddAzureConnectorNamespace returns a builder"],"tags":["azure","connector-namespace","null-argument","constructor"],"backgroundTag":"null-argument","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"}