Skip to content

Commit e1155e0

Browse files
committed
1. apply API changes per #55332
2. fix incorrect namespace of service extension types
1 parent e47c15a commit e1155e0

8 files changed

+41
-37
lines changed

src/Caching/Hybrid/src/HybridCacheBuilderExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Diagnostics.CodeAnalysis;
5-
using Microsoft.Extensions.DependencyInjection;
5+
using Microsoft.Extensions.Caching.Hybrid;
66

7-
namespace Microsoft.Extensions.Caching.Hybrid;
7+
namespace Microsoft.Extensions.DependencyInjection;
88

99
/// <summary>
1010
/// Configuration extension methods for <see cref="IHybridCacheBuilder"/> / <see cref="HybridCache"/>.
@@ -14,7 +14,7 @@ public static class HybridCacheBuilderExtensions
1414
/// <summary>
1515
/// Serialize values of type <typeparamref name="T"/> with the specified serializer from <paramref name="serializer"/>.
1616
/// </summary>
17-
public static IHybridCacheBuilder WithSerializer<T>(this IHybridCacheBuilder builder, IHybridCacheSerializer<T> serializer)
17+
public static IHybridCacheBuilder AddSerializer<T>(this IHybridCacheBuilder builder, IHybridCacheSerializer<T> serializer)
1818
{
1919
builder.Services.AddSingleton<IHybridCacheSerializer<T>>(serializer);
2020
return builder;
@@ -23,7 +23,7 @@ public static IHybridCacheBuilder WithSerializer<T>(this IHybridCacheBuilder bui
2323
/// <summary>
2424
/// Serialize values of type <typeparamref name="T"/> with the serializer of type <typeparamref name="TImplementation"/>.
2525
/// </summary>
26-
public static IHybridCacheBuilder WithSerializer<T,
26+
public static IHybridCacheBuilder AddSerializer<T,
2727
#if NET5_0_OR_GREATER
2828
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
2929
#endif
@@ -37,7 +37,7 @@ public static IHybridCacheBuilder WithSerializer<T>(this IHybridCacheBuilder bui
3737
/// <summary>
3838
/// Add <paramref name="factory"/> as an additional serializer factory, which can provide serializers for multiple types.
3939
/// </summary>
40-
public static IHybridCacheBuilder WithSerializerFactory(this IHybridCacheBuilder builder, IHybridCacheSerializerFactory factory)
40+
public static IHybridCacheBuilder AddSerializerFactory(this IHybridCacheBuilder builder, IHybridCacheSerializerFactory factory)
4141
{
4242
builder.Services.AddSingleton<IHybridCacheSerializerFactory>(factory);
4343
return builder;
@@ -46,7 +46,7 @@ public static IHybridCacheBuilder WithSerializerFactory(this IHybridCacheBuilder
4646
/// <summary>
4747
/// Add a factory of type <typeparamref name="TImplementation"/> as an additional serializer factory, which can provide serializers for multiple types.
4848
/// </summary>
49-
public static IHybridCacheBuilder WithSerializerFactory<
49+
public static IHybridCacheBuilder AddSerializerFactory<
5050
#if NET5_0_OR_GREATER
5151
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
5252
#endif

src/Caching/Hybrid/src/HybridCacheServiceExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System;
5+
using Microsoft.Extensions.Caching.Hybrid;
56
using Microsoft.Extensions.Caching.Hybrid.Internal;
6-
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.DependencyInjection.Extensions;
88

9-
namespace Microsoft.Extensions.Caching.Hybrid;
9+
namespace Microsoft.Extensions.DependencyInjection;
1010

1111
/// <summary>
1212
/// Configuration extension methods for <see cref="HybridCache"/>.

src/Caching/Hybrid/src/Internal/DefaultHybridCache.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,13 @@ public override ValueTask<T> GetOrCreateAsync<TState, T>(string key, TState stat
144144
return stampede.JoinAsync(token);
145145
}
146146

147-
public override ValueTask RemoveKeyAsync(string key, CancellationToken token = default)
147+
public override ValueTask RemoveAsync(string key, CancellationToken token = default)
148148
{
149149
_localCache.Remove(key);
150150
return _backendCache is null ? default : new(_backendCache.RemoveAsync(key, token));
151151
}
152152

153-
public override ValueTask RemoveTagAsync(string tag, CancellationToken token = default)
153+
public override ValueTask RemoveByTagAsync(string tag, CancellationToken token = default)
154154
=> default; // tags not yet implemented
155155

156156
public override ValueTask SetAsync<T>(string key, T value, HybridCacheEntryOptions? options = null, IReadOnlyCollection<string>? tags = null, CancellationToken token = default)

src/Caching/Hybrid/src/PublicAPI.Unshipped.txt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#nullable enable
22
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.GetOrCreateAsync<TState, T>(string! key, TState state, System.Func<TState, System.Threading.CancellationToken, System.Threading.Tasks.ValueTask<T>>! factory, Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryOptions? options = null, System.Collections.Generic.IReadOnlyCollection<string!>? tags = null, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<T>
3-
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveKeyAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
4-
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveTagAsync(string! tag, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
3+
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
4+
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveByTagAsync(string! tag, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
55
abstract Microsoft.Extensions.Caching.Hybrid.HybridCache.SetAsync<T>(string! key, T value, Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryOptions? options = null, System.Collections.Generic.IReadOnlyCollection<string!>? tags = null, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
66
Microsoft.Extensions.Caching.Distributed.IBufferDistributedCache
77
Microsoft.Extensions.Caching.Distributed.IBufferDistributedCache.Set(string! key, System.Buffers.ReadOnlySequence<byte> value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options) -> void
@@ -11,7 +11,6 @@ Microsoft.Extensions.Caching.Distributed.IBufferDistributedCache.TryGetAsync(str
1111
Microsoft.Extensions.Caching.Hybrid.HybridCache
1212
Microsoft.Extensions.Caching.Hybrid.HybridCache.GetOrCreateAsync<T>(string! key, System.Func<System.Threading.CancellationToken, System.Threading.Tasks.ValueTask<T>>! factory, Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryOptions? options = null, System.Collections.Generic.IReadOnlyCollection<string!>? tags = null, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<T>
1313
Microsoft.Extensions.Caching.Hybrid.HybridCache.HybridCache() -> void
14-
Microsoft.Extensions.Caching.Hybrid.HybridCacheBuilderExtensions
1514
Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags
1615
Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags.DisableCompression = 32 -> Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags
1716
Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags.DisableDistributedCache = Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags.DisableDistributedCacheRead | Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags.DisableDistributedCacheWrite -> Microsoft.Extensions.Caching.Hybrid.HybridCacheEntryFlags
@@ -42,19 +41,20 @@ Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions.MaximumPayloadBytes.get -
4241
Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions.MaximumPayloadBytes.set -> void
4342
Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions.ReportTagMetrics.get -> bool
4443
Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions.ReportTagMetrics.set -> void
45-
Microsoft.Extensions.Caching.Hybrid.HybridCacheServiceExtensions
4644
Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder
4745
Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
4846
Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>
4947
Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>.Deserialize(System.Buffers.ReadOnlySequence<byte> source) -> T
5048
Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>.Serialize(T value, System.Buffers.IBufferWriter<byte>! target) -> void
5149
Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializerFactory
5250
Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializerFactory.TryCreateSerializer<T>(out Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>? serializer) -> bool
53-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheBuilderExtensions.WithSerializer<T, TImplementation>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
54-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheBuilderExtensions.WithSerializer<T>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder, Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>! serializer) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
55-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheBuilderExtensions.WithSerializerFactory(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder, Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializerFactory! factory) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
56-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheBuilderExtensions.WithSerializerFactory<TImplementation>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
57-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheServiceExtensions.AddHybridCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
58-
static Microsoft.Extensions.Caching.Hybrid.HybridCacheServiceExtensions.AddHybridCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions!>! setupAction) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
59-
virtual Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveKeysAsync(System.Collections.Generic.IEnumerable<string!>! keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
60-
virtual Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveTagsAsync(System.Collections.Generic.IEnumerable<string!>! tags, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
51+
Microsoft.Extensions.DependencyInjection.HybridCacheBuilderExtensions
52+
Microsoft.Extensions.DependencyInjection.HybridCacheServiceExtensions
53+
static Microsoft.Extensions.DependencyInjection.HybridCacheBuilderExtensions.AddSerializer<T, TImplementation>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
54+
static Microsoft.Extensions.DependencyInjection.HybridCacheBuilderExtensions.AddSerializer<T>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder, Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer<T>! serializer) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
55+
static Microsoft.Extensions.DependencyInjection.HybridCacheBuilderExtensions.AddSerializerFactory(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder, Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializerFactory! factory) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
56+
static Microsoft.Extensions.DependencyInjection.HybridCacheBuilderExtensions.AddSerializerFactory<TImplementation>(this Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder! builder) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
57+
static Microsoft.Extensions.DependencyInjection.HybridCacheServiceExtensions.AddHybridCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
58+
static Microsoft.Extensions.DependencyInjection.HybridCacheServiceExtensions.AddHybridCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.Extensions.Caching.Hybrid.HybridCacheOptions!>! setupAction) -> Microsoft.Extensions.Caching.Hybrid.IHybridCacheBuilder!
59+
virtual Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveAsync(System.Collections.Generic.IEnumerable<string!>! keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask
60+
virtual Microsoft.Extensions.Caching.Hybrid.HybridCache.RemoveByTagAsync(System.Collections.Generic.IEnumerable<string!>! tags, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask

src/Caching/Hybrid/src/Runtime/HybridCache.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,21 @@ private static class WrappedCallbackCache<T> // per-T memoized helper that allow
6767
/// <summary>
6868
/// Asynchronously removes the value associated with the key if it exists.
6969
/// </summary>
70-
public abstract ValueTask RemoveKeyAsync(string key, CancellationToken token = default);
70+
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Not ambiguous in context")]
71+
public abstract ValueTask RemoveAsync(string key, CancellationToken token = default);
7172

7273
/// <summary>
7374
/// Asynchronously removes the value associated with the key if it exists.
7475
/// </summary>
7576
/// <remarks>Implementors should treat <c>null</c> as empty</remarks>
76-
public virtual ValueTask RemoveKeysAsync(IEnumerable<string> keys, CancellationToken token = default)
77+
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Not ambiguous in context")]
78+
public virtual ValueTask RemoveAsync(IEnumerable<string> keys, CancellationToken token = default)
7779
{
7880
return keys switch
7981
{
8082
// for consistency with GetOrCreate/Set: interpret null as "none"
8183
null or ICollection<string> { Count: 0 } => default,
82-
ICollection<string> { Count: 1 } => RemoveTagAsync(keys.Single(), token),
84+
ICollection<string> { Count: 1 } => RemoveByTagAsync(keys.Single(), token),
8385
_ => ForEachAsync(this, keys, token),
8486
};
8587

@@ -88,7 +90,7 @@ static async ValueTask ForEachAsync(HybridCache @this, IEnumerable<string> keys,
8890
{
8991
foreach (var key in keys)
9092
{
91-
await @this.RemoveKeyAsync(key, token).ConfigureAwait(false);
93+
await @this.RemoveAsync(key, token).ConfigureAwait(false);
9294
}
9395
}
9496
}
@@ -97,13 +99,14 @@ static async ValueTask ForEachAsync(HybridCache @this, IEnumerable<string> keys,
9799
/// Asynchronously removes all values associated with the specified tags.
98100
/// </summary>
99101
/// <remarks>Implementors should treat <c>null</c> as empty</remarks>
100-
public virtual ValueTask RemoveTagsAsync(IEnumerable<string> tags, CancellationToken token = default)
102+
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Not ambiguous in context")]
103+
public virtual ValueTask RemoveByTagAsync(IEnumerable<string> tags, CancellationToken token = default)
101104
{
102105
return tags switch
103106
{
104107
// for consistency with GetOrCreate/Set: interpret null as "none"
105108
null or ICollection<string> { Count: 0 } => default,
106-
ICollection<string> { Count: 1 } => RemoveTagAsync(tags.Single(), token),
109+
ICollection<string> { Count: 1 } => RemoveByTagAsync(tags.Single(), token),
107110
_ => ForEachAsync(this, tags, token),
108111
};
109112

@@ -112,13 +115,14 @@ static async ValueTask ForEachAsync(HybridCache @this, IEnumerable<string> keys,
112115
{
113116
foreach (var key in keys)
114117
{
115-
await @this.RemoveTagAsync(key, token).ConfigureAwait(false);
118+
await @this.RemoveByTagAsync(key, token).ConfigureAwait(false);
116119
}
117120
}
118121
}
119122

120123
/// <summary>
121124
/// Asynchronously removes all values associated with the specified tag.
122125
/// </summary>
123-
public abstract ValueTask RemoveTagAsync(string tag, CancellationToken token = default);
126+
[System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Not ambiguous in context")]
127+
public abstract ValueTask RemoveByTagAsync(string tag, CancellationToken token = default);
124128
}

src/Caching/Hybrid/test/BufferReleaseTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public async Task BufferGetsReleased_NoL2()
5353
Assert.NotSame(first, second);
5454

5555
Assert.Equal(1, cacheItem.RefCount);
56-
await cache.RemoveKeyAsync(key);
56+
await cache.RemoveAsync(key);
5757
var third = await cache.GetOrCreateAsync(key, _ => GetAsync(), _noUnderlying);
5858
Assert.Null(third);
5959

@@ -138,7 +138,7 @@ static bool Write(IBufferWriter<byte> destination, byte[]? buffer)
138138
Assert.NotSame(first, second);
139139

140140
Assert.Equal(1, cacheItem.RefCount);
141-
await cache.RemoveKeyAsync(key);
141+
await cache.RemoveAsync(key);
142142
var third = await cache.GetOrCreateAsync(key, _ => GetAsync(), _noUnderlying);
143143
Assert.Null(third);
144144
Assert.Null(await cache.BackendCache.GetAsync(key)); // should be gone from L2 too
@@ -196,7 +196,7 @@ static bool Write(IBufferWriter<byte> destination, byte[]? buffer)
196196
Assert.NotSame(first, second);
197197

198198
Assert.Equal(1, cacheItem.RefCount);
199-
await cache.RemoveKeyAsync(key);
199+
await cache.RemoveAsync(key);
200200
var third = await cache.GetOrCreateAsync(key, _ => GetAsync(), _noUnderlying);
201201
Assert.Null(third);
202202
Assert.Null(await cache.BackendCache.GetAsync(key)); // should be gone from L2 too

src/Caching/Hybrid/test/L2Tests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public async Task AssertL2Operations_Immutable(bool buffers)
8181
Assert.Equal(8, backend.OpCount); // SET
8282

8383
Log.WriteLine("Removing key...");
84-
await cache.RemoveKeyAsync(Me());
84+
await cache.RemoveAsync(Me());
8585
Assert.Equal(9, backend.OpCount); // DEL
8686

8787
Log.WriteLine("Fetching new...");
@@ -136,7 +136,7 @@ public async Task AssertL2Operations_Mutable(bool buffers)
136136
Assert.Equal(8, backend.OpCount); // SET
137137

138138
Log.WriteLine("Removing key...");
139-
await cache.RemoveKeyAsync(Me());
139+
await cache.RemoveAsync(Me());
140140
Assert.Equal(9, backend.OpCount); // DEL
141141

142142
Log.WriteLine("Fetching new...");

src/Caching/Hybrid/test/ServiceConstructionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void DefaultSerializerConfiguration()
120120
public void CustomSerializerConfiguration()
121121
{
122122
var services = new ServiceCollection();
123-
services.AddHybridCache().WithSerializer<Customer, CustomerSerializer>();
123+
services.AddHybridCache().AddSerializer<Customer, CustomerSerializer>();
124124
using var provider = services.BuildServiceProvider();
125125
var cache = Assert.IsType<DefaultHybridCache>(provider.GetRequiredService<HybridCache>());
126126

@@ -132,7 +132,7 @@ public void CustomSerializerConfiguration()
132132
public void CustomSerializerFactoryConfiguration()
133133
{
134134
var services = new ServiceCollection();
135-
services.AddHybridCache().WithSerializerFactory<CustomFactory>();
135+
services.AddHybridCache().AddSerializerFactory<CustomFactory>();
136136
using var provider = services.BuildServiceProvider();
137137
var cache = Assert.IsType<DefaultHybridCache>(provider.GetRequiredService<HybridCache>());
138138

0 commit comments

Comments
 (0)