{"record":{"id":"a20c2087af7270a6","repo":"AvaloniaUI/Avalonia","slug":"metadata-is-already-set-for-name-on-type","errorCode":null,"errorMessage":"Metadata is already set for {Name} on {type}.","messagePattern":"Metadata is already set for (.+?) on (.+?)\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Avalonia.Base/AvaloniaProperty.cs","lineNumber":640,"sourceCode":"        /// <param name=\"priority\">The priority.</param>\n        internal abstract IDisposable RouteBind(\n            AvaloniaObject o,\n            IObservable<object?> source,\n            BindingPriority priority);\n\n        /// <summary>\n        /// Overrides the metadata for the property on the specified type.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"metadata\">The metadata.</param>\n        private protected void OverrideMetadata(Type type, AvaloniaPropertyMetadata metadata)\n        {\n            _ = type ?? throw new ArgumentNullException(nameof(type));\n            _ = metadata ?? throw new ArgumentNullException(nameof(metadata));\n\n            if (_metadata.ContainsKey(type))\n            {\n                throw new InvalidOperationException(\n                    $\"Metadata is already set for {Name} on {type}.\");\n            }\n\n            var baseMetadata = GetMetadata(type);\n            metadata.Merge(baseMetadata, this);\n            metadata.Freeze();\n            _metadata.Add(type, metadata);\n            _metadataCache.Clear();\n\n            _singleMetadata = null;\n            _singleHostType = null;\n        }\n\n        private protected abstract IObservable<AvaloniaPropertyChangedEventArgs> GetChanged();\n\n        [MethodImpl(MethodImplOptions.NoInlining)]\n        private AvaloniaPropertyMetadata GetMetadataFromCache(AvaloniaObject obj)\n        {","sourceCodeStart":622,"sourceCodeEnd":658,"githubUrl":"https://github.com/AvaloniaUI/Avalonia/blob/11c542726898ae954a1ef668c65ec79ec92ab17d/src/Avalonia.Base/AvaloniaProperty.cs#L622-L658","documentation":"Thrown by AvaloniaProperty.OverrideMetadata when metadata has already been registered for the given type. Each type may override a property's metadata exactly once; a second override attempt for the same type is rejected to keep metadata merging deterministic.","triggerScenarios":"Calling OverrideMetadata(type, metadata) twice for the same type; two modules/assemblies both overriding metadata for the same property on the same type during static init.","commonSituations":"Class hierarchies where a base and derived both override; test harness re-initializing properties; assembly load order changes causing duplicate overrides.","solutions":["Override metadata for each distinct type only once.","Move shared overrides to a single base type and let inheritance propagate.","If loading optional modules, guard the override with a ContainsKey check or a static flag."],"exampleFix":"// before\nMyProperty.OverrideMetadata(typeof(MyControl), meta1);\nMyProperty.OverrideMetadata(typeof(MyControl), meta2); // throws\n\n// after\nMyProperty.OverrideMetadata(typeof(MyControl), meta1);\n// do not override the same type again; use a different type or skip","handlingStrategy":"validation","validationCode":"if (!AlreadyOverridden(prop, typeof(T)))\n    prop.OverrideMetadata(typeof(T), metadata);\n\nstatic bool AlreadyOverridden(AvaloniaProperty p, Type t) =>\n    /* inspect internal cache via a guarded reflection or track a static set */ false;","typeGuard":null,"tryCatchPattern":"try { prop.OverrideMetadata(type, metadata); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"already set\"))\n{ /* metadata already overridden; skip */ }","preventionTips":["Override metadata for each type exactly once.","Consolidate overrides in a base type.","Guard module-loaded overrides with a ContainsKey-style check."],"tags":["property-system","metadata","invalid-operation"],"backgroundTag":null,"analyzedSha":"11c542726898ae954a1ef668c65ec79ec92ab17d","analyzedAt":"2026-08-13T11:57:40.261Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}