Ensure cache expiration or hit on StorageCacheService
Enhancement
HTTP handling now uses proper logging templates
Enhancement
Adding Mediator:Http:Debug = true to your configuration allows mediator HTTP request to log out all of the HTTP request & responses
4.0.2 - March 14, 2025
Fix
If deserialization in file store fails for any reason, return default
Fix
Remove unnecessary library from Dapper extension
Fix
Proper generic constraint added to RequestMiddleware
Fix
InMemoryCommandScheduler now bypasses middleware and exception handling
Chore
Move to SLNX
Chore
Move to centralized nuget packages
4.0.1 - March 5, 2025
Enhancement
IHttpRequestDecorator now takes in an IMediatorContext argument
4.0.0 - March 4, 2025
Feature
ICommandExecuter, IEventExecutor, IStreamRequestExecutor, and IRequestExecutor all added behind mediator to allow more plug points for things like Sentry to watch scope
BREAKINGEnhancement
IMediator.Request now returns a tuple with context and result instead of having a separate extension
BREAKINGEnhancement
RequestContext, EventContext, CommandContext, and EventAggregatedContext are now all MediatorContext. (I)MediatorContext has ChildContexts to replace EventAggregatedContext
BREAKINGEnhancement
BypassMiddleware & BypassExceptionHandling is now built directly into the mediator context
BREAKINGEnhancement
You no longer pass headers to mediator calls, there is a callback that provides an IMediatorContext where you can setup all the necessary headers directly
Enhancement
MediatorContext now has an activity source for providing telemetry through handlers and middleware
Enhancement
MAUI connectivity broadcaster now watches for pages (and their binding context) appearing to see if it should receive connectivity event as well as sending last event value immediately
Fix
Stream Requests now have their service scope properly disposed even if an error occurs during enumeration
BREAKINGChore
MediatorContext Values is now called Headers
BREAKINGChore
ShinyConfigurator is now called ShinyMediatorBuilder
Global Exception Handling via new IExceptionHandler
Enhancement
User error notification now works on global exception handling
MAUI
Feature
ConnectivityBroadcaster allows your services to take IEventHandler<ConnectivityChanged> to have your services listen to one central location of connectivity change events
3.1.2 - January 28, 2025
Fix
Event handlers were not getting their sent headers set in the event context
Fix
Removed cancellation token from event context to prevent misuse
Fix
RequestContext property RequestHandler has been renamed to Handler to be consistent with other context objects
Fix
Ensure only one cache service can be installed
App Support
Enhancement
Internet service now has an event to monitor connectivity
MAUI
Enhancement
Support Multi-Window MAUI apps in event collector
Enhancement
AlertDialogService now looks at Windows like event collector
Fix
MauiHttpRequestDecorator safeties geolocation header appending and improves configuration
Prism
Enhancement
Add PrismNavigationCommand & PrismNavigationRecord bases to inherit
3.1.0 - January 25, 2025
Core
Enhancement
Ability to control timer refresh through header arguments
Enhancement
You can now force cache refreshing through Request(contract, cancel token, CacheExtensions.ForceCacheRefreshHeader)
Enhancement
Ability to set cache arguments through header arguments
Enhancement
Commands can now be scheduled through headers
Dapper Extension
Enhancement
Dapper requests now have requests keys built-in to their request objects
Enhancement
Dapper requests now accept transactions and command types
3.0.0 - January 24, 2025
Feature
New Dapper Extension that allows you to easily (and smartly) use Dapper with InterpolatedSql in a smart way that allows you to take advantage of all the mediator middleware. This further allows you to make the middleware act as a SQL interceptor as well.
BREAKINGFeature
Commands replace Requests and also have their own pipeline
Feature
Command Scheduling with basic in-memory scheduler
Feature
Ability to send headers to a mediator command/request/stream that is added to the context
Enhancement
ReplayStreamMiddleware now sets values on the context as it passes each layer
BREAKINGEnhancement
AddShinyMediator now has a flag to allow you to remove all of the default middleware (defaults to true)
Enhancement
Timeout support for HTTP handler
Enhancement
Full logging in HTTP handler to debug your requests
Enhancement
Replay middleware will not try to return handler result when timeout detection (removes downstream crash)
Enhancement
Caching setup is now in the base Shiny.Mediator allowing for easier caching extension
Enhancement
Shiny.Mediator.AppSupport has a ‘Persistent Cache’ that survives app restarts - Works great for offline scenarios too
Enhancement
Replay will now optional grab cache if available first and ONLY then will it fall back to online
Enhancement
ASP.NET extensions now include MapMediatorPost extension methods of the IEndpointRouteBuilder to work well with minimal APIs
BREAKINGEnhancement
EventContext is passed to event handlers as well as middleware
BREAKINGEnhancement
Command and Request contexts are now available at the handlers
BREAKINGEnhancement
Stream request handlers now bring in request contexts
Fix
Offline middleware returns offline result when TimeoutException is thrown by internal middleware or handler
Chore
Shiny.Mediator.Caching is deprecated and replaced by Shiny.Mediator.Caching.MicrosoftMemoryCache
BREAKINGChore
ExecutionContext has been renamed to RequestContext
BREAKINGChore
EventExecutionContext is now called EventContext
2.1.1 - Oct 30, 2024
Enhancement
More Prism navigation contract control
2.1.0 - Oct 19, 2024
Enhancement
Reducing some infrastructure reflection as we work towards a potential AOT compliant library
Enhancement
Downgrading source generator libraries to work with older net8 SDKs
Enhancement
OpenAPI generator now factors in TimeSpans
Enhancement
Serializer service now exists in the main library with optional configuration
Enhancement
IMediator Publish now allows you to setup publish in parallel or sequential
Fix
HttpRequestHandler will use serializer service
2.0.3 - Oct 7, 2024
Enhancement
Easy extensions methods for AddShinyMediator for the MauiAppBuilder and WebAssemblyHostBuilder
2.0.2 - Oct 6, 2024
Fix
ASPNET extension was not generating the proper result type for POST & PUT
2.0.1 - Oct 6, 2024
Fix
OpenApiGenerator was not returning subtypes from string
Enhancement
ASPNET OperationId is not enforced through the attribute constructor
Chore
Improved source generator logging
2.0.0 - Oct 4, 2024
Feature
Most middleware and internal handlers now support configuration via Microsoft.Extensions.Configuration vs using attributes - HTTP, Timer Refresh, Offline, Stream Replay, Performance Logging, Caching, User Notifications
Feature
Blazor now supports offline, stream replay, and user notification middleware
Feature
ExecutionContext allows you to add metadata from middleware that can be consumed by the caller (IMediator.RequestWithContext return ExecutionResult, Send now returns ExecutionContext)
Feature
EventAggregatedExecutionContext(List of EventExecutionContext) allows you to add metadata from middleware that can be consumed by the caller - IMediator.Publish now returns this by default
Enhancement
OpenApiGenerator now allows DateOnly, TimeOnly, and Stream results
Enhancement
OpenApiGenerator offers better support for inline enums and subtypes (node based APIs)
Enhancement
Improved logging, so you can see your pipeline execution pipeline front to back
Enhancement
Request Handlers that return a result that is marked with IEvent will now publish it automatically
Enhancement
Stream Replay will now also wait for internet connectivity before pumping a new data request
Fix
OpenApiGenerator now tacks on global namespace to all object types
Fix
Registration source generator did not default the library namespace
OpenApiGenerator returns INT by default when no format is supplied
BREAKINGChore
IRequestMiddleware and IStreamRequestMiddleware signature changed to support ExecutionContext and reduce argument count
BREAKINGChore
Contract feature attributes have been removed for ReplayStream, Cache, Resilience, & Offline
BREAKINGChore
ReplayStream and Offline are only across sessions now
BREAKINGChore
TimedLoggingRequestMiddleware has been renamed to PerformanceLoggingMiddleware (including registration extensions)
BREAKINGChore
TimedLoggingAttribute has been removed in favour of ONLY using configuration going forward
BREAKINGChore
UserNotifyAttribute has been removed in favour of ONLY using configuration going forward
1.8.1 - September 14, 2024
Fix
OpenApiGenerator was not writing return results if they were arrays
1.8.0 - September 11, 2024
Feature
New HTTP Request Handler and framework
Feature
New HTTP Request OpenAPI source generator
Enhancement
ICacheControl is now available for contracts that allows more direct control over your cached calls
Fix
OfflineAvailableAttribute was not allowed to be applied to contracts
1.7.4 - August 9, 2024
Fix
Fix implicit namespace usage
1.7.3 - August 7, 2024
Fix
Source generators were not generating scoped handlers
Enhancement
aspnet HttpGet and HttpDelete is now supported. Contracts are mapped using [AsParamters]
1.7.2 - July 28, 2024
Enhancement
IRequestKey now has default interface implement to use ReflectKey
Enhancement
Minor timestampedresult signature improvement
1.7.1 - July 28, 2024
Enhancement
Attributes for offline, caches, etc can now be applied on the request contract AND/OR the request handlers
Enhancement
IRequestKey.ReflectKey looks through all public, instance, getters that are not null into part of the key
Enhancement
Logging is now built into the core mediator library
Enhancement
Request pipeline now has logging built-in
Enhancement
ExceptionHandlerEventMiddleware & TimedLoggingRequestMiddleware moved from MAUI to main library
1.7.0 - July 20, 2024
Feature
New contract validation middleware using data annotations or fluentvalidation
Enhancement
Add new contract TimestampedResult generic to help with timestamps of when a cache or offline bundle is from
1.6.0 - July 7, 2024
Enhancement
Refresh timer middleware is now installed by default
Enhancement
Add Name to HTTP attribute in ASP.NET extension
Enhancement
Streaming AsyncEnumerables now mapped by ASP.NET extension
More MemoryCache extensions (clear by partial key, get entries)
1.5.0 - July 5, 2024
Feature
Shiny.Mediator.AspNet - that allows you to map your request handlers directly to HTTP endpoints
BREAKINGEnhancement
Source Generator attributes have been renamed from RegisterHandler & RegisterMiddleware to SingletonHandler/ScopedHandler & SingletonMiddleware/ScopedMiddleware
1.4.5 - July 3, 2024
Feature
Strongly typed navigation now exists for Shell, just like Prism. This functionality is built into Shiny.Mediator.Maui
1.4.0 - June 30, 2024
Feature
Shiny.Mediator.Prism - this new package allows you to easily create strongly typed navigation routes & arguments while working across modules
1.3.0 - June 29, 2024
Enhancement
Request Keys can be controlled by implementing IRequestKey on your request object allowing you to return a cache/offline/replay key based on your arg values
Enhancement
MainThread middleware can now be used on request handlers as well
Enhancement
UserExceptionRequestMiddleware is now configurable and can be appled with attribute [UserExceptionRequestMiddleware] on each request handler method
Feature
Mediator middleware that has some form of store (cache/replay/offline) now responds to a global event called Shiny.Mediator.Middleware.FlushAllStoresEvent in Shiny.Mediator that calls all stores to be flushed
Feature
Resiliency middleware (Shiny.Mediator.Resilience} based on Microsoft.Extensions.Resilience
Feature
Offline Availability Middleware separated from caching and allows you to store across app sessions as needed (part of Shiny.Mediator.Maui)
BREAKINGFeature
Caching middleware is now Shiny.Mediator.Caching and uses IMemoryCache under the hood