/// <summary>
        /// Генерация схемы для редактирования контентов
        /// </summary>
        /// <exception cref="NotSupportedException" />
        /// <exception cref="InvalidOperationException" />
        public ProductSchema GetProductSchema(Content content)
        {
            if (content == null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            _contentService.LoadStructureCache();
            _fieldService.LoadStructureCache();

            VirtualFieldContext virtualFieldContext = _virtualFieldContextService.GetVirtualFieldContext(content);

            var context = new SchemaContext
            {
                Dictionaries  = content.Fields.OfType <Dictionaries>().SingleOrDefault(),
                IgnoredFields = virtualFieldContext.IgnoredFields,
            };

            ContentSchema contentSchema = GetContentSchema(content, context, "");

            ProductSchema productSchema = GetProductSchema(contentSchema, context);

            return(productSchema);
        }
        /// <summary>
        /// Генерация словаря с объединенными схемами для каждого <see cref="ContentSchema.ContentId"/> из продукта
        /// </summary>
        public Dictionary <int, ContentSchema> GetMergedContentSchemas(ProductSchema productSchema)
        {
            var schemasByContentId = new Dictionary <int, ContentSchema>();

            if (productSchema.Content is ContentSchema)
            {
                CreateEmptyContentSchemas((ContentSchema)productSchema.Content, schemasByContentId);
            }
            foreach (ContentSchema definitionSchema in productSchema.Definitions.Values)
            {
                CreateEmptyContentSchemas(definitionSchema, schemasByContentId);
            }

            if (productSchema.Content is ContentSchema)
            {
                FillMergedContentSchemas((ContentSchema)productSchema.Content, schemasByContentId);
            }
            foreach (ContentSchema definitionSchema in productSchema.Definitions.Values)
            {
                FillMergedContentSchemas(definitionSchema, schemasByContentId);
            }

            return(schemasByContentId);
        }