6
6
using Microsoft . AspNetCore . DataProtection . StackExchangeRedis ;
7
7
using Microsoft . AspNetCore . Shared ;
8
8
using Microsoft . Extensions . DependencyInjection ;
9
+ using Microsoft . Extensions . Options ;
9
10
using StackExchange . Redis ;
10
11
11
12
namespace Microsoft . AspNetCore . DataProtection ;
@@ -28,7 +29,7 @@ public static IDataProtectionBuilder PersistKeysToStackExchangeRedis(this IDataP
28
29
{
29
30
ArgumentNullThrowHelper . ThrowIfNull ( builder ) ;
30
31
ArgumentNullThrowHelper . ThrowIfNull ( databaseFactory ) ;
31
- return PersistKeysToStackExchangeRedisInternal ( builder , databaseFactory , key ) ;
32
+ return PersistKeysToStackExchangeRedisInternal ( builder , _ => databaseFactory ( ) , key ) ;
32
33
}
33
34
34
35
/// <summary>
@@ -53,15 +54,44 @@ public static IDataProtectionBuilder PersistKeysToStackExchangeRedis(this IDataP
53
54
{
54
55
ArgumentNullThrowHelper . ThrowIfNull ( builder ) ;
55
56
ArgumentNullThrowHelper . ThrowIfNull ( connectionMultiplexer ) ;
56
- return PersistKeysToStackExchangeRedisInternal ( builder , ( ) => connectionMultiplexer . GetDatabase ( ) , key ) ;
57
+ return PersistKeysToStackExchangeRedisInternal ( builder , _ => connectionMultiplexer . GetDatabase ( ) , key ) ;
58
+ }
59
+
60
+ /// <summary>
61
+ /// Configures the data protection system to persist keys to the default key ('DataProtection-Keys') in Redis database
62
+ /// </summary>
63
+ /// <param name="builder">The builder instance to modify.</param>
64
+ /// <param name="databaseFactory">The <see cref="IConnectionMultiplexer"/> for database access.</param>
65
+ /// <returns>A reference to the <see cref="IDataProtectionBuilder" /> after this operation has completed.</returns>
66
+ public static IDataProtectionBuilder PersistKeysToStackExchangeRedis ( this IDataProtectionBuilder builder , Func < IServiceProvider , IDatabase > databaseFactory )
67
+ {
68
+ return PersistKeysToStackExchangeRedis ( builder , databaseFactory , DataProtectionKeysName ) ;
69
+ }
70
+
71
+ /// <summary>
72
+ /// Configures the data protection system to persist keys to the specified key in Redis database
73
+ /// </summary>
74
+ /// <param name="builder">The builder instance to modify.</param>
75
+ /// <param name="databaseFactory">The <see cref="IConnectionMultiplexer"/> for database access.</param>
76
+ /// <param name="key">The <see cref="RedisKey"/> used to store key list.</param>
77
+ /// <returns>A reference to the <see cref="IDataProtectionBuilder" /> after this operation has completed.</returns>
78
+ public static IDataProtectionBuilder PersistKeysToStackExchangeRedis ( this IDataProtectionBuilder builder , Func < IServiceProvider , IDatabase > databaseFactory , RedisKey key )
79
+ {
80
+ ArgumentNullThrowHelper . ThrowIfNull ( builder ) ;
81
+ ArgumentNullThrowHelper . ThrowIfNull ( databaseFactory ) ;
82
+ return PersistKeysToStackExchangeRedisInternal ( builder , databaseFactory , key ) ;
57
83
}
58
84
59
- private static IDataProtectionBuilder PersistKeysToStackExchangeRedisInternal ( IDataProtectionBuilder builder , Func < IDatabase > databaseFactory , RedisKey key )
85
+ private static IDataProtectionBuilder PersistKeysToStackExchangeRedisInternal ( IDataProtectionBuilder builder , Func < IServiceProvider , IDatabase > databaseFactory , RedisKey key )
60
86
{
61
- builder . Services . Configure < KeyManagementOptions > ( options =>
87
+ builder . Services . AddSingleton < IConfigureOptions < KeyManagementOptions > > ( services =>
62
88
{
63
- options . XmlRepository = new RedisXmlRepository ( databaseFactory , key ) ;
89
+ return new ConfigureOptions < KeyManagementOptions > ( options =>
90
+ {
91
+ options . XmlRepository = new RedisXmlRepository ( ( ) => databaseFactory ( services ) , key ) ;
92
+ } ) ;
64
93
} ) ;
94
+
65
95
return builder ;
66
96
}
67
97
}
0 commit comments