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); }
public bool IsInheritedOrEqual(PageMetadataProvider baseMetadataProvider) { if (baseMetadataProvider == null) { throw new ArgumentNullException(nameof(baseMetadataProvider)); } return(ContentMetadata.IsInheritedOrEqual(baseMetadataProvider.ContentMetadata)); }
internal PageMetadataProvider(ContentMetadataProvider contentMetadata, PageMetadataProvider parentPageMetadata) { ContentMetadata = contentMetadata; ParentMetadata = parentPageMetadata; if (parentPageMetadata != null) { parentPageMetadata.derivedTypes.Add(this); } }
private bool TryGetPageMetadataByContentType(Type contentType, out PageMetadataProvider pageMetadataProvider) { if (!typeObjectTypes.TryGetValue(contentType, out int index)) { pageMetadataProvider = null; return(false); } pageMetadataProvider = metadataProviders[index]; return(true); }
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); }
public static IEnumerable <PageMetadataProvider> GetDerivedMetadataWithHierarhy(this PageMetadataProvider pageMetadata, bool includeCurrent) { if (includeCurrent) { yield return(pageMetadata); } foreach (var derivedPageMetadata in pageMetadata.DerivedTypes) { yield return(derivedPageMetadata); foreach (var childDerivedPageMetadata in GetDerivedMetadataWithHierarhy(derivedPageMetadata, false)) { yield return(childDerivedPageMetadata); } } }