Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
        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());
        }