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); }
internal PageMetadataProvider(ContentMetadataProvider contentMetadata, PageMetadataProvider parentPageMetadata) { ContentMetadata = contentMetadata; ParentMetadata = parentPageMetadata; if (parentPageMetadata != null) { parentPageMetadata.derivedTypes.Add(this); } }
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); }
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(); }