{"record":{"id":"7584c3904aa9ebfd","repo":"stride3d/stride","slug":"the-type-type-name-does-not-have-a-public-constructor","errorCode":null,"errorMessage":"The type {type.Name} does not have a public constructor matching the expected signature: ({string.Join(\", \", (IEnumerable<Type>)AssetPropertyNodeGraphConstructorSignature)})","messagePattern":"The type (.+?) does not have a public constructor matching the expected signature: \\((.+?)\\)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"sources/assets/Stride.Core.Assets.Quantum/AssetQuantumRegistry.cs","lineNumber":52,"sourceCode":"            return;\n\n        // Read the precomputed scan index instead of reflecting over every type: the assembly processor\n        // already buckets the [AssemblyScan] graph attributes, so this skips loading unrelated types (some\n        // assemblies, e.g. Stride.Assets referencing MSBuild, can't fully load all their types in every host).\n        var scanTypes = AssemblyRegistry.GetScanTypes(assembly);\n        if (scanTypes is null)\n            return;\n\n        if (scanTypes.Types.TryGetValue(typeof(AssetPropertyGraphAttribute), out var graphTypes))\n        {\n            foreach (var type in graphTypes)\n            {\n                var attribute = type.GetCustomAttribute<AssetPropertyGraphAttribute>();\n                if (attribute is null)\n                    continue;\n\n                if (type.GetConstructor(AssetPropertyNodeGraphConstructorSignature) is null)\n                    throw new InvalidOperationException($\"The type {type.Name} does not have a public constructor matching the expected signature: ({string.Join(\", \", (IEnumerable<Type>)AssetPropertyNodeGraphConstructorSignature)})\");\n\n                if (!NodeGraphTypes.TryAdd(attribute.AssetType, type))\n                    throw new ArgumentException($\"The type {attribute.AssetType.Name} already has an associated property node graph type.\");\n            }\n        }\n\n        if (scanTypes.Types.TryGetValue(typeof(AssetPropertyGraphDefinitionAttribute), out var definitionTypes))\n        {\n            foreach (var type in definitionTypes)\n            {\n                var attribute = type.GetCustomAttribute<AssetPropertyGraphDefinitionAttribute>();\n                if (attribute is null)\n                    continue;\n\n                if (type.GetConstructor(Type.EmptyTypes) is null)\n                    throw new InvalidOperationException($\"The type {type.Name} does not have a public parameterless constructor.)\");\n\n                if (NodeGraphDefinitions.ContainsKey(attribute.AssetType))","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/assets/Stride.Core.Assets.Quantum/AssetQuantumRegistry.cs#L34-L70","documentation":"Error \"The type {type.Name} does not have a public constructor matching the expected signature: ({string.Join(\", \", (IEnumerable<Type>)AssetPropertyNodeGraphConstructorSignature)})\" thrown in stride3d/stride.","triggerScenarios":"Thrown at sources/assets/Stride.Core.Assets.Quantum/AssetQuantumRegistry.cs:52 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a public constructor to the graph type with signature (AssetPropertyGraphContainer, AssetItem, ILogger)","Fix the constructor parameter types so they match exactly","Regenerate/fix the assembly processor output if the attribute was applied to the wrong type"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}