1
1
using LinkDotNet . Blog . Domain ;
2
2
using LinkDotNet . Blog . Infrastructure . Persistence ;
3
- using LinkDotNet . Blog . Infrastructure . Persistence . Sql ;
4
3
using Microsoft . Extensions . Caching . Memory ;
5
4
using Microsoft . Extensions . Configuration ;
6
5
using Microsoft . Extensions . DependencyInjection ;
@@ -11,27 +10,38 @@ public static class StorageProviderExtensions
11
10
{
12
11
public static void AddStorageProvider ( this IServiceCollection services , IConfiguration configuration )
13
12
{
13
+ services . AddMemoryCache ( ) ;
14
+
14
15
var persistenceProvider = PersistenceProvider . Create ( configuration [ "PersistenceProvider" ] ) ;
15
16
16
17
if ( persistenceProvider == PersistenceProvider . InMemory )
17
18
{
18
19
services . UseInMemoryAsStorageProvider ( ) ;
20
+ services . RegisterCachedRepository < Infrastructure . Persistence . InMemory . Repository < BlogPost > > ( ) ;
19
21
}
20
22
else if ( persistenceProvider == PersistenceProvider . RavenDb )
21
23
{
22
24
services . UseRavenDbAsStorageProvider ( ) ;
25
+ services . RegisterCachedRepository < Infrastructure . Persistence . RavenDb . Repository < BlogPost > > ( ) ;
23
26
}
24
27
else if ( persistenceProvider == PersistenceProvider . SqliteServer )
25
28
{
26
29
services . UseSqliteAsStorageProvider ( ) ;
30
+ services . RegisterCachedRepository < Infrastructure . Persistence . Sql . Repository < BlogPost > > ( ) ;
27
31
}
28
32
else if ( persistenceProvider == PersistenceProvider . SqlServer )
29
33
{
30
34
services . UseSqlAsStorageProvider ( ) ;
35
+ services . RegisterCachedRepository < Infrastructure . Persistence . Sql . Repository < BlogPost > > ( ) ;
31
36
}
37
+ }
32
38
33
- services . AddMemoryCache ( ) ;
34
- services . AddScoped < Repository < BlogPost > > ( ) ;
35
- services . AddScoped < IRepository < BlogPost > > ( provider => new CachedRepository < BlogPost > ( provider . GetRequiredService < Repository < BlogPost > > ( ) , provider . GetRequiredService < IMemoryCache > ( ) ) ) ;
39
+ private static void RegisterCachedRepository < TRepo > ( this IServiceCollection services )
40
+ where TRepo : class , IRepository < BlogPost >
41
+ {
42
+ services . AddScoped < TRepo > ( ) ;
43
+ services . AddScoped < IRepository < BlogPost > > ( provider => new CachedRepository < BlogPost > (
44
+ provider . GetRequiredService < TRepo > ( ) ,
45
+ provider . GetRequiredService < IMemoryCache > ( ) ) ) ;
36
46
}
37
47
}
0 commit comments