Mediator Releases
3.4.0 - TBD
Proposals
Feature
ICommandExecuter, IRequestExecutor, IEventExecutor, and IRequestStreamExecutor all added behind mediator to allow more plug points for things like Sentry to watch scope
Feature
Routing to a transport - SignalR, HTTP, GRPC, RMQ?
3.3.1 - February 20, 2025
Feature
Feature
Enhancement
Ability to bypass middleware using headers - mediator.Send(…, cancelToken, Headers.BypassMiddleware)
Enhancement
Ability to bypass error traps using
Headers.BypassExceptionHandling
- all Shiny Mediator middleware that error trap will respect this header Enhancement
Performance middleware uses the better, allocation free version of the Stopwatch
BREAKING Fix
Offline and persistent cache could collide if the same type used both
Chore
Remove Sourcelink as it is built in now
3.2.0 - January 30, 2025
Feature
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 events3.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.
BREAKING Feature
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
BREAKING Enhancement
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
BREAKING Enhancement
EventContext is passed to event handlers as well as middleware
BREAKING Enhancement
Command and Request contexts are now available at the handlers
BREAKING Enhancement
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
BREAKING Chore
ExecutionContext has been renamed to RequestContext
BREAKING Chore
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
Fix
OpenApiGenerator returns INT by default when no format is supplied
BREAKING Chore
IRequestMiddleware and IStreamRequestMiddleware signature changed to support ExecutionContext and reduce argument count
BREAKING Chore
Contract feature attributes have been removed for ReplayStream, Cache, Resilience, & Offline
BREAKING Chore
ReplayStream and Offline are only across sessions now
BREAKING Chore
TimedLoggingRequestMiddleware has been renamed to PerformanceLoggingMiddleware (including registration extensions)
BREAKING Chore
TimedLoggingAttribute has been removed in favour of ONLY using configuration going forward
BREAKING Chore
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
BREAKING Enhancement
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)
BREAKING Feature
Caching middleware is now Shiny.Mediator.Caching and uses IMemoryCache under the hood
1.2.0 - June 19, 2024
Feature
Streaming Requests that request IAsyncEnumerable
Feature
Streaming Request Middleware
Feature
OOTB Streaming Request Middleware - Timer Refresh & Replay
1.1.0 - June 17, 2024
Fix
Void requests
IRequestHandler<T>
would not always resolve Fix
Relaxed generic constraints on RequestMiddleware
Enhancement
MAUI CacheRequestMiddleware can hnow have cache flushed per item or all
1.0.0 - June 15, 2024
Our initial release - checkout the following: