using System; using System.Collections.Generic; using System.Linq; using System.Text; using Umbraco.Core.Models; namespace Umbraco.Web.PublishedCache { public interface IPublishedContentCache : IPublishedCache { /// /// Gets content identified by a route. /// /// The context. /// A value indicating whether to consider unpublished content. /// The route /// A value forcing the HideTopLevelNode setting. /// The content, or null. /// /// A valid route is either a simple path eg /foo/bar/nil or a root node id and a path, eg 123/foo/bar/nil. /// If is null then the settings value is used. /// The value of overrides the context. /// IPublishedContent GetByRoute(UmbracoContext umbracoContext, bool preview, string route, bool? hideTopLevelNode = null); /// /// Gets the route for a content identified by its unique identifier. /// /// The context. /// A value indicating whether to consider unpublished content. /// The content unique identifier. /// The route. /// The value of overrides the context. string GetRouteById(UmbracoContext umbracoContext, bool preview, int contentId); /// /// Creates a content fragment. /// /// The content type alias. /// The content property raw values. /// A value indicating whether the fragment is previewing. /// A value indicating whether the fragment is managed by the cache. /// The newly created content fragment. // // notes // // in XmlPublishedCache, IPublishedContent instances are not meant to survive longer // that a request or else we cannot guarantee that the converted property values will // be properly managed - because XmlPublishedProperty just stores the result of the // conversion locally. // // in DrippingPublishedCache, IPublishedContent instances are meant to survive for as // long as the content itself has not been modified, and the property respects the // converter's indication ie whether the converted value should be cached at // .Content - cache until the content changes // .ContentCache - cache until any content changes // .Request - cache for the current request // // a fragment can be either "detached" or "managed". // detached: created from code, managed by code, converted property values are // cached within the fragment itself for as long as the fragment lives // managed: created from a property converter as part of a content, managed by // the cache, converted property values can be cached... // // XmlPublishedCache: same as content properties, store the result of the // conversion locally, neither content nor fragments should survive longer // than a request // DrippingPublishedCache: depends // .Content: cache within the fragment // .ContentCache, .Request: cache within the cache // // in the latter case, use a fragment-owned guid as the cache key. because we // don't really have any other choice. this opens potential memory leaks: if the // fragment is re-created on each request and has a property that caches its // converted value at .ContentCache level then we'll flood that cache with data // that's never removed (as long as no content is edited). // // so a requirement should be that any converter that creates fragment, should // be marked .Content -- and nothing else // IPublishedContent CreateFragment(string contentTypeAlias, IDictionary dataValues, bool isPreviewing, bool managed); } }