Skip to content

Commit e357736

Browse files
Craig WardmanCraig Wardman
authored andcommitted
added dot net core di container extensions to exemplify registrations
1 parent e3b5877 commit e357736

File tree

4 files changed

+48
-2
lines changed

4 files changed

+48
-2
lines changed

ChunkingRedisClient.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
</PropertyGroup>
1515

1616
<ItemGroup>
17+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
1718
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
1819
<PackageReference Include="StackExchange.Redis" Version="2.0.519" />
1920
</ItemGroup>

Client/IRedisClientConfig.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace ChunkingRedisClient.Client
2+
{
3+
public interface IRedisClientConfig
4+
{
5+
string ConnectionString { get; }
6+
}
7+
}

Client/RedisClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public class RedisClient<TKey, TItem> : IRedisClient<TKey, TItem>
1818
private readonly string _keyPrefix;
1919
private IDatabase _prefixedDatabase;
2020

21-
public RedisClient(string connectionString, IRedisWriter<TKey, TItem> redisWriter, IRedisReader<TKey, TItem> redisReader, IRedisDeleter<TKey, TItem> redisDeleter)
21+
public RedisClient(IRedisClientConfig config, IRedisWriter<TKey, TItem> redisWriter, IRedisReader<TKey, TItem> redisReader, IRedisDeleter<TKey, TItem> redisDeleter)
2222
{
23-
_connectionString = connectionString ?? throw new ArgumentNullException(nameof(connectionString));
23+
_connectionString = string.IsNullOrEmpty(config?.ConnectionString) ? throw new ArgumentNullException(nameof(config.ConnectionString)) : config.ConnectionString;
2424
_redisWriter = redisWriter ?? throw new ArgumentNullException(nameof(redisWriter));
2525
_redisReader = redisReader ?? throw new ArgumentNullException(nameof(redisReader));
2626
_redisDeleter = redisDeleter ?? throw new ArgumentNullException(nameof(redisDeleter));

MicrosoftDiExtensions.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using ChunkingRedisClient.Client;
3+
using ChunkingRedisClient.Client.Deleter;
4+
using ChunkingRedisClient.Client.Reader;
5+
using ChunkingRedisClient.Client.Writer;
6+
using ChunkingRedisClient.Keys;
7+
using ChunkingRedisClient.Locking;
8+
using Microsoft.Extensions.DependencyInjection;
9+
10+
namespace ChunkingRedisClient
11+
{
12+
public static class MicrosoftDiExtensions
13+
{
14+
public static void AddRedisClient<TKey, TItem>(this IServiceCollection serviceCollection, int? chunkSize)
15+
{
16+
serviceCollection.AddSingleton<IKeygen<Guid>, GuidKeygen>(); // user to manually register any other keygen classes
17+
serviceCollection.AddSingleton<IRedisLockFactory, RedisLockFactory>();
18+
19+
if (chunkSize.GetValueOrDefault(0) is int chunk && chunk > 0)
20+
{
21+
serviceCollection.AddScoped<IRedisReader<TKey, TItem>, ChunkedJsonRedisReader<TKey, TItem>>();
22+
serviceCollection.AddScoped<IRedisDeleter<TKey, TItem>, ChunkedDeleter<TKey, TItem>>();
23+
serviceCollection.AddScoped(provider => new ChunkedJsonRedisWriter<TKey, TItem>(
24+
provider.GetRequiredService<IKeygen<TKey>>(),
25+
provider.GetRequiredService<IRedisLockFactory>(),
26+
chunk));
27+
}
28+
else
29+
{
30+
serviceCollection.AddScoped<IRedisReader<TKey, TItem>, JsonRedisReader<TKey, TItem>>();
31+
serviceCollection.AddScoped<IRedisDeleter<TKey, TItem>, StandardDeleter<TKey, TItem>>();
32+
serviceCollection.AddScoped<IRedisWriter<TKey, TItem>, JsonRedisWriter<TKey, TItem>>();
33+
}
34+
35+
serviceCollection.AddScoped<IRedisClient<TKey, TItem>, RedisClient<TKey, TItem>>(); // user to define IRedisClientConfig impl.
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)