diff --git a/samples/Sample/MauiProgram.cs b/samples/Sample/MauiProgram.cs index 76addf2..9ba86ef 100644 --- a/samples/Sample/MauiProgram.cs +++ b/samples/Sample/MauiProgram.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Configuration; +using System.Reflection; +using Microsoft.Extensions.Configuration; using Polly; namespace Sample; @@ -37,12 +38,8 @@ public static MauiApp CreateMauiApp() builder.Logging.AddDebug(); builder.Services.AddBlazorWebViewDeveloperTools(); #endif - builder.Configuration.AddInMemoryCollection(new Dictionary - { - // NOTE: Mediator:Http is the based sub config - the namespace follows PER http generation - // the value is the base URI - { "Mediator:Http:Http.TheActual", "https://localhost:7192/" } - }!); + builder.Configuration.AddJsonStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("Sample.appsettings.json")!); + builder.Services.AddShinyMediator(x => x .UseMaui() .UseBlazor() diff --git a/samples/Sample/Sample.csproj b/samples/Sample/Sample.csproj index d6cb009..79da672 100644 --- a/samples/Sample/Sample.csproj +++ b/samples/Sample/Sample.csproj @@ -96,6 +96,7 @@ + diff --git a/samples/Sample/appsettings.json b/samples/Sample/appsettings.json index 4764dab..0a9ccce 100644 --- a/samples/Sample/appsettings.json +++ b/samples/Sample/appsettings.json @@ -3,7 +3,8 @@ "Http": { // * works here - all http contracts will pick up a baseURI "My.Namespace.Contact": "https://otherlocalhost", - "My.Namespace.*" : "https://localhost" + "My.Namespace.*" : "https://localhost", + "Http.TheActual": "https://localhost:7192" }, "Performance": { // * works here diff --git a/src/Shiny.Mediator.Caching/Infrastructure/CachingRequestMiddleware.cs b/src/Shiny.Mediator.Caching/Infrastructure/CachingRequestMiddleware.cs index cac9c7b..7bf43dc 100644 --- a/src/Shiny.Mediator.Caching/Infrastructure/CachingRequestMiddleware.cs +++ b/src/Shiny.Mediator.Caching/Infrastructure/CachingRequestMiddleware.cs @@ -21,28 +21,39 @@ CancellationToken cancellationToken if (typeof(TResult) == typeof(Unit)) return await next().ConfigureAwait(false); + CacheAttribute? attribute = null; + var cacheKey = CacheExtensions.GetCacheKey(request!); var section = configuration.GetHandlerSection("Cache", request!, requestHandler); + if (section != null) { - // TODO: ICacheControl + var priority = section.GetValue("Priority", CacheItemPriority.Normal); + var absoluteExpirationSeconds = section.GetValue("AbsoluteExpirationSeconds", 60); + var slidingExpirationSeconds = section.GetValue("SlidingExpirationSeconds", 0); + + attribute = new CacheAttribute + { + Priority = priority, + AbsoluteExpirationSeconds = absoluteExpirationSeconds, + SlidingExpirationSeconds = slidingExpirationSeconds + }; } else { - var attribute = requestHandler.GetHandlerHandleMethodAttribute(); + attribute = requestHandler.GetHandlerHandleMethodAttribute(); attribute ??= request!.GetType().GetCustomAttribute(); - if (attribute == null && request is not ICacheControl) - return await next().ConfigureAwait(false); } + if (attribute == null && request is not ICacheControl) + return await next().ConfigureAwait(false); + TResult result = default!; - var cacheKey = CacheExtensions.GetCacheKey(request!); - if (request is ICacheControl control && control.ForceRefresh) + if (request is ICacheControl { ForceRefresh: true }) { result = await next().ConfigureAwait(false); - var entry = cache.CreateEntry(cacheKey); entry.Value = result; - // this.SetCacheEntry(attribute, request, entry); + this.SetCacheEntry(attribute, request, entry); } else { @@ -51,7 +62,7 @@ CancellationToken cancellationToken cacheKey, entry => { - // this.SetCacheEntry(attribute, request, entry); + this.SetCacheEntry(attribute, request, entry); return next(); } ) @@ -67,8 +78,7 @@ protected virtual void SetCacheEntry(CacheAttribute? attribute, TRequest request { entry.Priority = attribute.Priority; if (attribute.AbsoluteExpirationSeconds > 0) - entry.AbsoluteExpirationRelativeToNow = - TimeSpan.FromSeconds(attribute.AbsoluteExpirationSeconds); + entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(attribute.AbsoluteExpirationSeconds); if (attribute.SlidingExpirationSeconds > 0) entry.SlidingExpiration = TimeSpan.FromSeconds(attribute.SlidingExpirationSeconds);