11using LinkDotNet . Blog . Domain ;
22using LinkDotNet . Blog . Infrastructure . Persistence ;
3- using LinkDotNet . Blog . Infrastructure . Persistence . Sql ;
43using Microsoft . Extensions . Caching . Memory ;
54using Microsoft . Extensions . Configuration ;
65using Microsoft . Extensions . DependencyInjection ;
@@ -11,27 +10,38 @@ public static class StorageProviderExtensions
1110{
1211 public static void AddStorageProvider ( this IServiceCollection services , IConfiguration configuration )
1312 {
13+ services . AddMemoryCache ( ) ;
14+
1415 var persistenceProvider = PersistenceProvider . Create ( configuration [ "PersistenceProvider" ] ) ;
1516
1617 if ( persistenceProvider == PersistenceProvider . InMemory )
1718 {
1819 services . UseInMemoryAsStorageProvider ( ) ;
20+ services . RegisterCachedRepository < Infrastructure . Persistence . InMemory . Repository < BlogPost > > ( ) ;
1921 }
2022 else if ( persistenceProvider == PersistenceProvider . RavenDb )
2123 {
2224 services . UseRavenDbAsStorageProvider ( ) ;
25+ services . RegisterCachedRepository < Infrastructure . Persistence . RavenDb . Repository < BlogPost > > ( ) ;
2326 }
2427 else if ( persistenceProvider == PersistenceProvider . SqliteServer )
2528 {
2629 services . UseSqliteAsStorageProvider ( ) ;
30+ services . RegisterCachedRepository < Infrastructure . Persistence . Sql . Repository < BlogPost > > ( ) ;
2731 }
2832 else if ( persistenceProvider == PersistenceProvider . SqlServer )
2933 {
3034 services . UseSqlAsStorageProvider ( ) ;
35+ services . RegisterCachedRepository < Infrastructure . Persistence . Sql . Repository < BlogPost > > ( ) ;
3136 }
37+ }
3238
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 > ( ) ) ) ;
3646 }
3747}
0 commit comments