public void TestInstantiatingContextWithoutDI() { var services = new ServiceCollection(); services.AddOptions(); var basePath = Directory.GetCurrentDirectory(); Console.WriteLine($"Using `{basePath}` as the ContentRootPath"); var configuration = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); services.AddSingleton(_ => configuration); var loggerProvider = new DebugLoggerProvider(); services.AddLogging(cfg => cfg.AddConsole().AddDebug().AddProvider(loggerProvider).SetMinimumLevel(LogLevel.Debug)); services.AddEFSecondLevelCache(options => options.UseMemoryCacheProvider(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(50)) ); var serviceProvider = services.BuildServiceProvider(); var loggerFactory = new LoggerFactory(new[] { loggerProvider }); var optionsBuilder = new DbContextOptionsBuilder <ApplicationDbContext>() .UseLoggerFactory(loggerFactory) .UseSqlServer( EFServiceProvider.GetConnectionString(basePath, configuration), sqlServerOptionsBuilder => { sqlServerOptionsBuilder.CommandTimeout((int)TimeSpan.FromMinutes(3).TotalSeconds); sqlServerOptionsBuilder.EnableRetryOnFailure(); sqlServerOptionsBuilder.MigrationsAssembly(typeof(MsSqlServiceCollectionExtensions).Assembly.FullName); }) .AddInterceptors(serviceProvider.GetRequiredService <SecondLevelCacheInterceptor>()); var options = (DbContextOptions <ApplicationDbContext>)optionsBuilder.Options; using (var context = new ApplicationDbContext(options)) { var items1 = context.DateTypes .Cacheable() .ToList(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsNotNull(items1); var items2 = context.DateTypes .Cacheable() .ToList(); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); Assert.IsNotNull(items2); } }
public static IServiceProvider GetConfiguredContextServiceProvider( TestCacheProvider cacheProvider, LogLevel logLevel, bool cacheAllQueries) { var services = new ServiceCollection(); services.AddOptions(); var basePath = Directory.GetCurrentDirectory(); Console.WriteLine($"Using `{basePath}` as the ContentRootPath"); var configuration = new Microsoft.Extensions.Configuration.ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); services.AddSingleton(_ => configuration); var loggerProvider = new DebugLoggerProvider(); services.AddLogging(cfg => cfg.AddConsole().AddDebug().AddProvider(loggerProvider).SetMinimumLevel(logLevel)); services.AddEFSecondLevelCache(options => { switch (cacheProvider) { case TestCacheProvider.BuiltInInMemory: options.UseMemoryCacheProvider(); break; case TestCacheProvider.CacheManagerCoreInMemory: options.UseCacheManagerCoreProvider(); addCacheManagerCoreInMemory(services); break; case TestCacheProvider.CacheManagerCoreRedis: options.UseCacheManagerCoreProvider(); addCacheManagerCoreRedis(services); break; } if (cacheAllQueries) { options.CacheAllQueries(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(30)); } }); services.AddConfiguredMsSqlDbContext(GetConnectionString(basePath, configuration)); return(services.BuildServiceProvider()); }
public static IServiceProvider GetConfiguredContextServiceProvider( bool useRedis, LogLevel logLevel, bool cacheAllQueries) { var services = new ServiceCollection(); services.AddOptions(); var basePath = Directory.GetCurrentDirectory(); Console.WriteLine($"Using `{basePath}` as the ContentRootPath"); var configuration = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); services.AddSingleton(_ => configuration); var loggerProvider = new DebugLoggerProvider(); services.AddLogging(cfg => cfg.AddConsole().AddDebug().AddProvider(loggerProvider).SetMinimumLevel(logLevel)); services.AddEFSecondLevelCache(options => { if (useRedis) { options.UseRedisCacheProvider(configuration["RedisConfiguration"]); } else { options.UseMemoryCacheProvider(); } if (cacheAllQueries) { options.CacheAllQueries(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(30)); } }); services.AddConfiguredMsSqlDbContext(getConnectionString(basePath, configuration)); return(services.BuildServiceProvider()); }