/// <summary> /// Welds a new part to the content item. If a part of the same type is already welded nothing is done. /// This part can be not defined in Content Definitions. /// </summary> /// <typeparam name="TPart">The type of the part to be welded.</typeparam> public static ContentElement Weld <TElement>(this ContentElement contentElement, object?settings = null) where TElement : ContentElement, new() { var elementName = typeof(TElement).Name; if (!(contentElement.Data[elementName] is JObject)) { // Build and welded the part. var part = new TElement(); contentElement.Weld(elementName, part); } if (!contentElement.Data.TryGetValue(WeldedPartSettingsName, out var result)) { contentElement.Data[WeldedPartSettingsName] = result = new JObject(); } var weldedPartSettings = (JObject)result; var settingsModel = settings == null ? new JObject() : JObject.FromObject( settings, ContentBuilderSettings.IgnoreDefaultValuesSerializer); weldedPartSettings[elementName] = settingsModel; return(contentElement); }