コード例 #1
0
        /// <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);
        }