From e89beb90f165a10a61e2b85567a4d68ba07dc3d8 Mon Sep 17 00:00:00 2001 From: Andre Racz Date: Tue, 27 Apr 2021 16:54:19 +0000 Subject: [PATCH 1/2] Cache Config --- .../Config/CacheConfiguration.cs | 36 +++++++++++++++++++ OltivaFlix.Domain/Config/CacheSettings.cs | 13 +++++++ OltivaFlix.Domain/Config/CacheTypes.cs | 7 ++++ OltivaFlix.Domain/DI/DomainRequestHandlers.cs | 15 -------- .../DI/IServiceCollectionExtensions.cs | 26 ++++++++++++++ .../Handler/GetMovieCommandHandler.cs | 11 ++++-- ...ces.cs => IServiceCollectionExtensions.cs} | 6 ++-- OltivaFlix.Webapi/Startup.cs | 19 ++++++++-- OltivaFlix.Webapi/appsettings.json | 4 +++ 9 files changed, 116 insertions(+), 21 deletions(-) create mode 100644 OltivaFlix.Domain/Config/CacheConfiguration.cs create mode 100644 OltivaFlix.Domain/Config/CacheSettings.cs create mode 100644 OltivaFlix.Domain/Config/CacheTypes.cs delete mode 100644 OltivaFlix.Domain/DI/DomainRequestHandlers.cs create mode 100644 OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs rename OltivaFlix.Infrastructure/DI/{RegisterHttpServices.cs => IServiceCollectionExtensions.cs} (65%) diff --git a/OltivaFlix.Domain/Config/CacheConfiguration.cs b/OltivaFlix.Domain/Config/CacheConfiguration.cs new file mode 100644 index 0000000..b64ac6a --- /dev/null +++ b/OltivaFlix.Domain/Config/CacheConfiguration.cs @@ -0,0 +1,36 @@ +using System.Diagnostics.CodeAnalysis; +using Liquid.Core.Configuration; +using Microsoft.Extensions.Configuration; + +namespace OltivaFlix.Domain.Config +{ + /// + /// Redis Cache Configuration Class. + /// + /// + /// Liquid.Core.Configuration.ILightConfiguration{Liquid.Cache.Redis.Configuration.RedisCacheSettings} + /// + /// + /// Liquid.Configuration.AppSetting + /// + [ExcludeFromCodeCoverage] + [ConfigurationSection("OltivaCache")] + public class CacheConfiguration : LightConfiguration, ILightConfiguration + { + /// + /// Initializes a new instance of the class. + /// + /// The configuration. + public CacheConfiguration(IConfiguration configuration) : base(configuration) + { + } + + /// + /// Gets the settings. + /// + /// + /// The settings. + /// + public CacheSettings Settings => GetConfigurationSection(); + } +} \ No newline at end of file diff --git a/OltivaFlix.Domain/Config/CacheSettings.cs b/OltivaFlix.Domain/Config/CacheSettings.cs new file mode 100644 index 0000000..b020ef5 --- /dev/null +++ b/OltivaFlix.Domain/Config/CacheSettings.cs @@ -0,0 +1,13 @@ + + +namespace OltivaFlix.Domain.Config +{ + public class CacheSettings + { + public const string CacheConfigKey = "CacheConfig"; + + public int CacheTimeMinutes { get; set; } + + public CacheType CacheType { get; set; } + } +} diff --git a/OltivaFlix.Domain/Config/CacheTypes.cs b/OltivaFlix.Domain/Config/CacheTypes.cs new file mode 100644 index 0000000..a62fd79 --- /dev/null +++ b/OltivaFlix.Domain/Config/CacheTypes.cs @@ -0,0 +1,7 @@ +namespace OltivaFlix.Domain.Config +{ + public enum CacheType + { + Redis, Memory + } +} \ No newline at end of file diff --git a/OltivaFlix.Domain/DI/DomainRequestHandlers.cs b/OltivaFlix.Domain/DI/DomainRequestHandlers.cs deleted file mode 100644 index 1d39a2a..0000000 --- a/OltivaFlix.Domain/DI/DomainRequestHandlers.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Liquid.Domain.Extensions; - -namespace OltivaFlix.Domain.DI -{ - public static class DomainRequestHandlers - { - public static IServiceCollection RegisterDomainRequestHandler(this IServiceCollection services) - { - services.AddDomainRequestHandlers(typeof(DomainRequestHandlers).Assembly); - - return services; - } - } -} \ No newline at end of file diff --git a/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs b/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs new file mode 100644 index 0000000..2299743 --- /dev/null +++ b/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.DependencyInjection; +using Liquid.Core.Configuration; +using Liquid.Domain.Extensions; +using OltivaFlix.Domain.Config; + +namespace OltivaFlix.Domain.DI +{ + public static class IServiceCollectionExtensions + { + public static IServiceCollection RegisterDomainRequestHandler(this IServiceCollection services) + { + services.AddDomainRequestHandlers(typeof(IServiceCollectionExtensions).Assembly); + + return services; + } + + public static IServiceCollection RegisterCacheConfig(this IServiceCollection services) + { + + services.AddSingleton, CacheConfiguration>(); + return services; + } + } + + +} \ No newline at end of file diff --git a/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs b/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs index dd5e3a8..f25648c 100644 --- a/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs +++ b/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs @@ -1,15 +1,18 @@ using AutoMapper; using Liquid.Cache; +using Liquid.Core.Configuration; using Liquid.Core.Context; using Liquid.Core.Telemetry; using Liquid.Domain; using MediatR; +using OltivaFlix.Domain.Config; using OltivaFlix.Domain.Model; using OltivaFlix.Domain.Queries; using OltivaFlix.Domain.Service; using System.Threading; using System.Threading.Tasks; + namespace OltivaFlix.Domain.Handler { public class GetMovieCommandHandler : RequestHandlerBase, IRequestHandler @@ -17,12 +20,15 @@ public class GetMovieCommandHandler : RequestHandlerBase, IRequestHandler settings) : base(mediatorService, contextService, telemetryService, @@ -30,6 +36,7 @@ public GetMovieCommandHandler(IMediator mediatorService, { _movieService = movieService; _cache = cache; + _settings = settings.Settings; } public async Task Handle(GetMovieQuery request, CancellationToken cancellationToken) @@ -40,7 +47,7 @@ public async Task Handle(GetMovieQuery request, CancellationToken cancell { return _movieService.GetMovie(request.ImdbId).Result; }, - expirationDuration: System.TimeSpan.FromMinutes(10)); + expirationDuration: System.TimeSpan.FromMinutes(_settings.CacheTimeMinutes)); } } } \ No newline at end of file diff --git a/OltivaFlix.Infrastructure/DI/RegisterHttpServices.cs b/OltivaFlix.Infrastructure/DI/IServiceCollectionExtensions.cs similarity index 65% rename from OltivaFlix.Infrastructure/DI/RegisterHttpServices.cs rename to OltivaFlix.Infrastructure/DI/IServiceCollectionExtensions.cs index f4d3ad2..2c5f354 100644 --- a/OltivaFlix.Infrastructure/DI/RegisterHttpServices.cs +++ b/OltivaFlix.Infrastructure/DI/IServiceCollectionExtensions.cs @@ -3,13 +3,15 @@ namespace OltivaFlix.Infrastructure.DI { - public static class RegisterHttpServices + public static class IServiceCollectionExtensions { public static IServiceCollection RegisterHttpService(this IServiceCollection services) { - services.AddHttpServices(typeof(RegisterHttpServices).Assembly); + services.AddHttpServices(typeof(IServiceCollectionExtensions).Assembly); return services; } + + } } diff --git a/OltivaFlix.Webapi/Startup.cs b/OltivaFlix.Webapi/Startup.cs index a6c8c96..13c2330 100644 --- a/OltivaFlix.Webapi/Startup.cs +++ b/OltivaFlix.Webapi/Startup.cs @@ -1,5 +1,7 @@ +using System; using Liquid.Cache.Memory; using Liquid.Cache.Redis; +using Liquid.Core.Configuration; using Liquid.Core.DependencyInjection; using Liquid.WebApi.Http.Extensions; using Microsoft.AspNetCore.Builder; @@ -10,6 +12,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; +using OltivaFlix.Domain.Config; using OltivaFlix.Domain.DI; using OltivaFlix.Domain.Queries; using OltivaFlix.Domain.Service; @@ -30,6 +33,15 @@ public Startup(IConfiguration configuration) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { + services.RegisterCacheConfig(); + var sp = services.BuildServiceProvider(); + var cacheSettings = sp.GetService>(); + Console.WriteLine("Settings: " + cacheSettings.Settings.CacheType); + if (cacheSettings.Settings.CacheType == CacheType.Redis) { + services.AddLightRedisCache(); + } else if (cacheSettings.Settings.CacheType == CacheType.Memory) { + services.AddLightMemoryCache(); + } services .AddControllers() .AddJsonOptions(options => @@ -53,10 +65,13 @@ public void ConfigureServices(IServiceCollection services) services.ConfigureLiquidHttp(); services.AddLiquidSwagger(); - //services.AddLightRedisCache(); - services.AddLightMemoryCache(); + + + // + services.RegisterDomainRequestHandler(); services.RegisterHttpService(); + } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/OltivaFlix.Webapi/appsettings.json b/OltivaFlix.Webapi/appsettings.json index f3b8ec4..03396d0 100644 --- a/OltivaFlix.Webapi/appsettings.json +++ b/OltivaFlix.Webapi/appsettings.json @@ -29,6 +29,10 @@ "redis": { "connectionString": "127.0.0.1:6379" }, + "OltivaCache": { + "CacheTimeMinutes": 10, + "CacheType": "Memory" + }, "services": [ { "id": "MovieServiceHttpClient", From 763a42c40fdfd8416ba762a4b1711280b2190191 Mon Sep 17 00:00:00 2001 From: Fructuoso Date: Wed, 28 Apr 2021 09:04:15 -0300 Subject: [PATCH 2/2] simplifying use of config --- .../Config/CacheConfiguration.cs | 36 ------------------ OltivaFlix.Domain/Config/CacheSettings.cs | 13 ------- OltivaFlix.Domain/Config/CacheTypes.cs | 7 ---- .../DI/IServiceCollectionExtensions.cs | 11 ------ .../Handler/GetMovieCommandHandler.cs | 16 ++++---- OltivaFlix.Domain/OltivaFlix.Domain.csproj | 1 + OltivaFlix.Webapi/Startup.cs | 38 +++++++++++-------- 7 files changed, 32 insertions(+), 90 deletions(-) delete mode 100644 OltivaFlix.Domain/Config/CacheConfiguration.cs delete mode 100644 OltivaFlix.Domain/Config/CacheSettings.cs delete mode 100644 OltivaFlix.Domain/Config/CacheTypes.cs diff --git a/OltivaFlix.Domain/Config/CacheConfiguration.cs b/OltivaFlix.Domain/Config/CacheConfiguration.cs deleted file mode 100644 index b64ac6a..0000000 --- a/OltivaFlix.Domain/Config/CacheConfiguration.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Liquid.Core.Configuration; -using Microsoft.Extensions.Configuration; - -namespace OltivaFlix.Domain.Config -{ - /// - /// Redis Cache Configuration Class. - /// - /// - /// Liquid.Core.Configuration.ILightConfiguration{Liquid.Cache.Redis.Configuration.RedisCacheSettings} - /// - /// - /// Liquid.Configuration.AppSetting - /// - [ExcludeFromCodeCoverage] - [ConfigurationSection("OltivaCache")] - public class CacheConfiguration : LightConfiguration, ILightConfiguration - { - /// - /// Initializes a new instance of the class. - /// - /// The configuration. - public CacheConfiguration(IConfiguration configuration) : base(configuration) - { - } - - /// - /// Gets the settings. - /// - /// - /// The settings. - /// - public CacheSettings Settings => GetConfigurationSection(); - } -} \ No newline at end of file diff --git a/OltivaFlix.Domain/Config/CacheSettings.cs b/OltivaFlix.Domain/Config/CacheSettings.cs deleted file mode 100644 index b020ef5..0000000 --- a/OltivaFlix.Domain/Config/CacheSettings.cs +++ /dev/null @@ -1,13 +0,0 @@ - - -namespace OltivaFlix.Domain.Config -{ - public class CacheSettings - { - public const string CacheConfigKey = "CacheConfig"; - - public int CacheTimeMinutes { get; set; } - - public CacheType CacheType { get; set; } - } -} diff --git a/OltivaFlix.Domain/Config/CacheTypes.cs b/OltivaFlix.Domain/Config/CacheTypes.cs deleted file mode 100644 index a62fd79..0000000 --- a/OltivaFlix.Domain/Config/CacheTypes.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace OltivaFlix.Domain.Config -{ - public enum CacheType - { - Redis, Memory - } -} \ No newline at end of file diff --git a/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs b/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs index 2299743..5c64178 100644 --- a/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs +++ b/OltivaFlix.Domain/DI/IServiceCollectionExtensions.cs @@ -1,7 +1,5 @@ using Microsoft.Extensions.DependencyInjection; -using Liquid.Core.Configuration; using Liquid.Domain.Extensions; -using OltivaFlix.Domain.Config; namespace OltivaFlix.Domain.DI { @@ -13,14 +11,5 @@ public static IServiceCollection RegisterDomainRequestHandler(this IServiceColle return services; } - - public static IServiceCollection RegisterCacheConfig(this IServiceCollection services) - { - - services.AddSingleton, CacheConfiguration>(); - return services; - } } - - } \ No newline at end of file diff --git a/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs b/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs index f25648c..d56e566 100644 --- a/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs +++ b/OltivaFlix.Domain/Handler/GetMovieCommandHandler.cs @@ -1,18 +1,16 @@ using AutoMapper; using Liquid.Cache; -using Liquid.Core.Configuration; using Liquid.Core.Context; using Liquid.Core.Telemetry; using Liquid.Domain; using MediatR; -using OltivaFlix.Domain.Config; +using Microsoft.Extensions.Configuration; using OltivaFlix.Domain.Model; using OltivaFlix.Domain.Queries; using OltivaFlix.Domain.Service; using System.Threading; using System.Threading.Tasks; - namespace OltivaFlix.Domain.Handler { public class GetMovieCommandHandler : RequestHandlerBase, IRequestHandler @@ -20,7 +18,9 @@ public class GetMovieCommandHandler : RequestHandlerBase, IRequestHandler settings) + IConfiguration configuration) : base(mediatorService, contextService, telemetryService, @@ -36,7 +36,9 @@ public GetMovieCommandHandler(IMediator mediatorService, { _movieService = movieService; _cache = cache; - _settings = settings.Settings; + _configuration = configuration; + + _cacheMinutes = _configuration.GetValue("OltivaCache:CacheTimeMinutes", defaultValue: 10); } public async Task Handle(GetMovieQuery request, CancellationToken cancellationToken) @@ -47,7 +49,7 @@ public async Task Handle(GetMovieQuery request, CancellationToken cancell { return _movieService.GetMovie(request.ImdbId).Result; }, - expirationDuration: System.TimeSpan.FromMinutes(_settings.CacheTimeMinutes)); + expirationDuration: System.TimeSpan.FromMinutes(_cacheMinutes)); } } } \ No newline at end of file diff --git a/OltivaFlix.Domain/OltivaFlix.Domain.csproj b/OltivaFlix.Domain/OltivaFlix.Domain.csproj index 377893c..a1978bb 100644 --- a/OltivaFlix.Domain/OltivaFlix.Domain.csproj +++ b/OltivaFlix.Domain/OltivaFlix.Domain.csproj @@ -8,6 +8,7 @@ + diff --git a/OltivaFlix.Webapi/Startup.cs b/OltivaFlix.Webapi/Startup.cs index 13c2330..fb8fa0a 100644 --- a/OltivaFlix.Webapi/Startup.cs +++ b/OltivaFlix.Webapi/Startup.cs @@ -1,7 +1,5 @@ -using System; using Liquid.Cache.Memory; using Liquid.Cache.Redis; -using Liquid.Core.Configuration; using Liquid.Core.DependencyInjection; using Liquid.WebApi.Http.Extensions; using Microsoft.AspNetCore.Builder; @@ -12,7 +10,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; -using OltivaFlix.Domain.Config; +using Microsoft.Extensions.Logging; using OltivaFlix.Domain.DI; using OltivaFlix.Domain.Queries; using OltivaFlix.Domain.Service; @@ -23,7 +21,7 @@ namespace OltivaFlix.Webapi { public class Startup { - public IConfiguration _configuration { get; } + private readonly IConfiguration _configuration; public Startup(IConfiguration configuration) { @@ -33,15 +31,8 @@ public Startup(IConfiguration configuration) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.RegisterCacheConfig(); - var sp = services.BuildServiceProvider(); - var cacheSettings = sp.GetService>(); - Console.WriteLine("Settings: " + cacheSettings.Settings.CacheType); - if (cacheSettings.Settings.CacheType == CacheType.Redis) { - services.AddLightRedisCache(); - } else if (cacheSettings.Settings.CacheType == CacheType.Memory) { - services.AddLightMemoryCache(); - } + ConfigureCache(services); + services .AddControllers() .AddJsonOptions(options => @@ -65,13 +56,28 @@ public void ConfigureServices(IServiceCollection services) services.ConfigureLiquidHttp(); services.AddLiquidSwagger(); - + // - + services.RegisterDomainRequestHandler(); services.RegisterHttpService(); - + + } + + private void ConfigureCache(IServiceCollection services) + { + string cacheType = _configuration["OltivaCache:CacheType"]; + + switch (cacheType.ToUpper()) + { + case "REDIS": + services.AddLightRedisCache(); + break; + default: + services.AddLightMemoryCache(); + break; + } } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.