Пример #1
0
        private bool TryRegisterPageType(ContentMetadataProvider contentMetadata, out PageMetadataProvider pageMetadataProvider)
        {
            if (TryGetPageMetadataByContentType(contentMetadata.ModelType, out pageMetadataProvider))
            {
                return(true);
            }

            if (!IsPageType(contentMetadata.ModelType.GetTypeInfo()))
            {
                pageMetadataProvider = null;
                return(false);
            }

            var pageAttribute = contentMetadata.ModelType.GetCustomAttribute <PageContentAttribute>(false);

            if (pageAttribute == null)
            {
                pageMetadataProvider = null;
                return(false);
            }

            PageMetadataProvider parentPageMetadata = null;

            if (contentMetadata.BaseMetadata != null)
            {
                TryRegisterPageType(contentMetadata.BaseMetadata, out parentPageMetadata);
            }

            pageMetadataProvider = AddPageType(contentMetadata, pageAttribute, parentPageMetadata);
            return(true);
        }
Пример #2
0
        internal PageMetadataProvider(ContentMetadataProvider contentMetadata, PageMetadataProvider parentPageMetadata)
        {
            ContentMetadata = contentMetadata;
            ParentMetadata  = parentPageMetadata;

            if (parentPageMetadata != null)
            {
                parentPageMetadata.derivedTypes.Add(this);
            }
        }
Пример #3
0
        private PageMetadataProvider AddPageType(ContentMetadataProvider contentMetadataProvider, PageContentAttribute pageAttribute, PageMetadataProvider parentPageMetadata)
        {
            if (!contentMetadataProvider.IsDefinedTitleField)
            {
                throw new InvalidOperationException("Тип контента не может быть контентом страницы, так как для него не определено поле заголовка.");
            }

            var pageMetadata = new PageMetadataProvider(contentMetadataProvider, parentPageMetadata);

            var index = metadataProviders.Count;

            metadataProviders.Add(pageMetadata);
            typeNames.Add(contentMetadataProvider.Name.ToLower(), index);
            typeObjectTypes.Add(contentMetadataProvider.ModelType, index);

            return(pageMetadata);
        }
Пример #4
0
        internal virtual void Initialize(ContentMetadataProvider contentMetadata, IModelBinding modelBinding)
        {
            ContentMetadata   = contentMetadata;
            this.modelBinding = modelBinding;

            Type = GetType().Name;
            if (Type.EndsWith(TypeValueSuffiks))
            {
                Type = Type.Substring(0, Type.Length - TypeValueSuffiks.Length);
            }

            if (Name == null)
            {
                Name = this.modelBinding.Name;
            }
            if (Title == null)
            {
                Title = Name;
            }

            JsonPropertyName = Name.Substring(0, 1).ToLower() + Name.Substring(1);

            var valueType = this.modelBinding.ValueType;

            if (valueType.IsNullable())
            {
                AllowNull = true;
                valueType = valueType.GenericTypeArguments[0];
            }
            else if (valueType == typeof(string))
            {
                AllowNull = true;
            }
            else if (!valueType.IsValueType)
            {
                AllowNull = true;
            }

            ValueType = valueType;

            OnInitialize();
        }