Files
Umbraco-CMS/src/Umbraco.Core/Cache/AppCaches.cs

100 lines
3.7 KiB
C#
Raw Normal View History

using System;
using System.Web;
namespace Umbraco.Core.Cache
{
2017-07-20 11:21:28 +02:00
/// <summary>
2019-01-17 11:01:23 +01:00
/// Represents the application caches.
2017-07-20 11:21:28 +02:00
/// </summary>
2019-01-17 08:34:29 +01:00
public class AppCaches
2017-07-20 11:21:28 +02:00
{
/// <summary>
2019-01-17 11:01:23 +01:00
/// Initializes a new instance of the <see cref="AppCaches"/> for use in a web application.
2017-07-20 11:21:28 +02:00
/// </summary>
2019-01-17 08:34:29 +01:00
public AppCaches()
2019-01-17 11:01:23 +01:00
: this(HttpRuntime.Cache)
{ }
2017-07-20 11:21:28 +02:00
/// <summary>
2019-01-17 11:01:23 +01:00
/// Initializes a new instance of the <see cref="AppCaches"/> for use in a web application.
2017-07-20 11:21:28 +02:00
/// </summary>
2019-01-17 08:34:29 +01:00
public AppCaches(System.Web.Caching.Cache cache)
2017-07-20 11:21:28 +02:00
: this(
2019-01-17 11:01:23 +01:00
new WebCachingAppCache(cache),
new DictionaryCacheProvider(),
new HttpRequestAppCache(),
new IsolatedCaches(t => new ObjectCacheAppCache()))
{ }
2017-07-20 11:21:28 +02:00
/// <summary>
2019-01-17 11:01:23 +01:00
/// Initializes a new instance of the <see cref="AppCaches"/> with cache providers.
2017-07-20 11:21:28 +02:00
/// </summary>
2019-01-17 08:34:29 +01:00
public AppCaches(
2019-01-17 11:01:23 +01:00
IAppPolicedCache runtimeCache,
IAppCache staticCacheProvider,
IAppCache requestCache,
IsolatedCaches isolatedCaches)
{
2019-01-17 11:01:23 +01:00
RuntimeCache = runtimeCache ?? throw new ArgumentNullException(nameof(runtimeCache));
StaticCache = staticCacheProvider ?? throw new ArgumentNullException(nameof(staticCacheProvider));
2019-01-17 11:01:23 +01:00
RequestCache = requestCache ?? throw new ArgumentNullException(nameof(requestCache));
IsolatedCaches = isolatedCaches ?? throw new ArgumentNullException(nameof(isolatedCaches));
}
2018-07-13 12:11:00 +02:00
/// <summary>
/// Gets the special disabled instance.
/// </summary>
/// <remarks>
/// <para>When used by repositories, all cache policies apply, but the underlying caches do not cache anything.</para>
/// <para>Used by tests.</para>
/// </remarks>
2019-01-17 11:01:23 +01:00
public static AppCaches Disabled { get; } = new AppCaches(NoAppCache.Instance, NoAppCache.Instance, NoAppCache.Instance, new IsolatedCaches(_ => NoAppCache.Instance));
2018-07-13 12:11:00 +02:00
/// <summary>
/// Gets the special no-cache instance.
/// </summary>
/// <remarks>
/// <para>When used by repositories, all cache policies are bypassed.</para>
/// <para>Used by repositories that do no cache.</para>
/// </remarks>
2019-01-17 11:01:23 +01:00
public static AppCaches NoCache { get; } = new AppCaches(NoAppCache.Instance, NoAppCache.Instance, NoAppCache.Instance, new IsolatedCaches(_ => NoAppCache.Instance));
2018-07-13 12:11:00 +02:00
/// <summary>
2019-01-17 11:01:23 +01:00
/// Gets the per-request cache.
/// </summary>
2019-01-17 11:01:23 +01:00
/// <remarks>
/// <para>The per-request caches works on top of the current HttpContext items.</para>
/// fixme - what about non-web applications?
/// </remarks>
public IAppCache RequestCache { get; }
2017-07-20 11:21:28 +02:00
/// <summary>
/// Returns the current Runtime cache
/// </summary>
2019-01-17 11:01:23 +01:00
/// <remarks>
/// fixme - what is this? why not use RuntimeCache?
/// </remarks>
public IAppCache StaticCache { get; }
/// <summary>
2019-01-17 11:01:23 +01:00
/// Gets the runtime cache.
/// </summary>
2019-01-17 11:01:23 +01:00
/// <remarks>
/// <para>The runtime cache is the main application cache.</para>
/// </remarks>
public IAppPolicedCache RuntimeCache { get; }
/// <summary>
2019-01-17 11:01:23 +01:00
/// Gets the isolated caches.
/// </summary>
2019-01-17 11:01:23 +01:00
/// <remarks>
/// <para>Isolated caches are used by e.g. repositories, to ensure that each cached entity
/// type has its own cache, so that lookups are fast and the repository does not need to
/// search through all keys on a global scale.</para>
/// </remarks>
public IsolatedCaches IsolatedCaches { get; }
}
}