Exemplo n.º 1
0
        private ResourceType GetOrCreateContentPart(Type contentPartType, string contentPartName)
        {
            if (this._resourceTypes.ContainsKey(contentPartName))
            {
                return(this._resourceTypes[contentPartName]);
            }

            var resourceTypeContentPart = new ResourceType(
                typeof(ContentPart),
                ResourceTypeKind.ComplexType,
                null,
                (this as IDataServiceMetadataProvider).ContainerNamespace,
                contentPartName,
                false);

            resourceTypeContentPart.CanReflectOnInstanceType = false;
            resourceTypeContentPart.AddResourcePropertiesFromInstanceType(contentPartType);

            this._resourceTypes[contentPartName] = resourceTypeContentPart;
            return(resourceTypeContentPart);
        }
Exemplo n.º 2
0
        private ResourceType GetOrCreateContentField(ContentField contentField)
        {
            var contentFieldName = contentField.Name;

            if (this._resourceTypes.ContainsKey(contentFieldName))
            {
                return(this._resourceTypes[contentFieldName]);
            }

            var contentFieldType         = contentField.GetType();
            var resourceTypeContentField = new ResourceType(
                contentFieldType,
                ResourceTypeKind.ComplexType,
                null,
                (this as IDataServiceMetadataProvider).ContainerNamespace,
                contentFieldName,
                false);

            resourceTypeContentField.CanReflectOnInstanceType = false;
            resourceTypeContentField.AddResourcePropertiesFromInstanceType(contentFieldType);

            contentFieldType
            .GetProperties()
            .Where(property => property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(IEnumerable <>))
            .ToList()
            .ForEach(property =>
            {
                var orchardType = property.PropertyType.GenericTypeArguments.Single();
                if (orchardType.BaseType.IsGenericType && orchardType.BaseType.GetGenericTypeDefinition() == typeof(ContentPart <>))
                {
                    var resourceType         = this.GetOrCreateContentPart(orchardType, orchardType.Name);
                    resourceType.CustomState = property;
                    resourceTypeContentField.AddResourcePropertyFromInstanceCollectionResourceType(resourceType);
                }
            });

            this._resourceTypes[contentFieldName] = resourceTypeContentField;
            return(resourceTypeContentField);
        }