From 24385e74c4a0a74f7b1693e1649c62d6348df330 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 29 Sep 2016 10:43:56 -0700 Subject: [PATCH] Internalize iresponsecachekeyprovider (#59) Make IResponseCacheKeyProvider internal --- .../ResponseCacheServiceCollectionExtensions.cs | 1 - .../IResponseCacheKeyProvider.cs | 4 ++-- .../{ => Internal}/ResponseCacheKeyProvider.cs | 12 ++++++------ .../ResponseCacheMiddleware.cs | 12 ++++++++++++ .../ResponseCacheMiddlewareTests.cs | 4 ++-- 5 files changed, 22 insertions(+), 11 deletions(-) rename src/Microsoft.AspNetCore.ResponseCaching/{Interfaces => Internal}/IResponseCacheKeyProvider.cs (92%) rename src/Microsoft.AspNetCore.ResponseCaching/{ => Internal}/ResponseCacheKeyProvider.cs (91%) diff --git a/src/Microsoft.AspNetCore.ResponseCaching/Extensions/ResponseCacheServiceCollectionExtensions.cs b/src/Microsoft.AspNetCore.ResponseCaching/Extensions/ResponseCacheServiceCollectionExtensions.cs index e57dc5856f..d85e45d3fc 100644 --- a/src/Microsoft.AspNetCore.ResponseCaching/Extensions/ResponseCacheServiceCollectionExtensions.cs +++ b/src/Microsoft.AspNetCore.ResponseCaching/Extensions/ResponseCacheServiceCollectionExtensions.cs @@ -40,7 +40,6 @@ namespace Microsoft.Extensions.DependencyInjection private static IServiceCollection AddResponseCacheServices(this IServiceCollection services) { - services.TryAdd(ServiceDescriptor.Singleton()); services.TryAdd(ServiceDescriptor.Singleton()); return services; diff --git a/src/Microsoft.AspNetCore.ResponseCaching/Interfaces/IResponseCacheKeyProvider.cs b/src/Microsoft.AspNetCore.ResponseCaching/Internal/IResponseCacheKeyProvider.cs similarity index 92% rename from src/Microsoft.AspNetCore.ResponseCaching/Interfaces/IResponseCacheKeyProvider.cs rename to src/Microsoft.AspNetCore.ResponseCaching/Internal/IResponseCacheKeyProvider.cs index 89ae2ffa04..199f1a837b 100644 --- a/src/Microsoft.AspNetCore.ResponseCaching/Interfaces/IResponseCacheKeyProvider.cs +++ b/src/Microsoft.AspNetCore.ResponseCaching/Internal/IResponseCacheKeyProvider.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; -namespace Microsoft.AspNetCore.ResponseCaching +namespace Microsoft.AspNetCore.ResponseCaching.Internal { - public interface IResponseCacheKeyProvider + internal interface IResponseCacheKeyProvider { /// /// Create a base key for a response cache entry. diff --git a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheKeyProvider.cs b/src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCacheKeyProvider.cs similarity index 91% rename from src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheKeyProvider.cs rename to src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCacheKeyProvider.cs index a0db9a0a63..b7df0decc0 100644 --- a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheKeyProvider.cs +++ b/src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCacheKeyProvider.cs @@ -10,9 +10,9 @@ using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; -namespace Microsoft.AspNetCore.ResponseCaching +namespace Microsoft.AspNetCore.ResponseCaching.Internal { - public class ResponseCacheKeyProvider : IResponseCacheKeyProvider + internal class ResponseCacheKeyProvider : IResponseCacheKeyProvider { // Use the record separator for delimiting components of the cache key to avoid possible collisions private static readonly char KeyDelimiter = '\x1e'; @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.ResponseCaching private readonly ObjectPool _builderPool; private readonly ResponseCacheOptions _options; - public ResponseCacheKeyProvider(ObjectPoolProvider poolProvider, IOptions options) + internal ResponseCacheKeyProvider(ObjectPoolProvider poolProvider, IOptions options) { if (poolProvider == null) { @@ -35,13 +35,13 @@ namespace Microsoft.AspNetCore.ResponseCaching _options = options.Value; } - public virtual IEnumerable CreateLookupVaryByKeys(ResponseCacheContext context) + public IEnumerable CreateLookupVaryByKeys(ResponseCacheContext context) { return new string[] { CreateStorageVaryByKey(context) }; } // GET/PATH - public virtual string CreateBaseKey(ResponseCacheContext context) + public string CreateBaseKey(ResponseCacheContext context) { if (context == null) { @@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.ResponseCaching } // BaseKeyHHeaderName=HeaderValueQQueryName=QueryValue - public virtual string CreateStorageVaryByKey(ResponseCacheContext context) + public string CreateStorageVaryByKey(ResponseCacheContext context) { if (context == null) { diff --git a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs b/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs index 72f6902751..c49ac77e0b 100644 --- a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs +++ b/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Headers; using Microsoft.AspNetCore.ResponseCaching.Internal; using Microsoft.Extensions.Internal; +using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; @@ -28,6 +29,17 @@ namespace Microsoft.AspNetCore.ResponseCaching private readonly Func _onStartingCallback; public ResponseCacheMiddleware( + RequestDelegate next, + IResponseCacheStore store, + IOptions options, + IResponseCachePolicyProvider policyProvider, + ObjectPoolProvider poolProvider) + :this (next, store, options, policyProvider, new ResponseCacheKeyProvider(poolProvider, options)) + { + } + + // Internal for testing + internal ResponseCacheMiddleware( RequestDelegate next, IResponseCacheStore store, IOptions options, diff --git a/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs b/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs index 792c6630e5..138ed88af3 100644 --- a/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs @@ -64,7 +64,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests public async Task TryServeFromCacheAsync_VaryByRuleFound_CachedResponseNotFound_Fails() { var store = new TestResponseCacheStore(); - var middleware = TestUtils.CreateTestMiddleware(store: store, keyProvider: new TestResponseCacheKeyProvider("BaseKey")); + var middleware = TestUtils.CreateTestMiddleware(store: store, keyProvider: new TestResponseCacheKeyProvider("BaseKey", "VaryKey")); var context = TestUtils.CreateTestContext(); await store.SetAsync( @@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests TimeSpan.Zero); Assert.False(await middleware.TryServeFromCacheAsync(context)); - Assert.Equal(1, store.GetCount); + Assert.Equal(2, store.GetCount); } [Fact]