Releases: eventflow/EventFlow
Releases · eventflow/EventFlow
v1.0.4617-alpha
Read the complete migration guide to get the full list of changes as well
as recommendations on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
- Breaking: Remove support for .NET Framework and consolidate on .NET Core LTS versions
- Breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- Breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Remove
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used it.IAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
v0.81.4483
- Breaking: Elasticsearch NEST Nuget Library updated from v6.1.0 to v7.8.2
- New: Now possible to implement error handlers for specific sagas using
ISagaErrorHandler<TSaga>
- Fixed: You can now create
Id : Identity<Id>
v0.80.4377
- Breaking: To support .NET going forward, all EventFlow test have been converted
from .NET Framework 4.x to .NET Core 3.1. This however, introduced a set of
breaking changes- EntityFramework has been updated from 2.2.6 to 3.1.5
IHangfireJobRunner.Execute
is nowIHangfireJobRunner.ExecuteAsync
- Breaking: Merged
AggregateReadStoreManager
andSingleAggregateReadStoreManager
into one class in order to always guarantee in-order event processing - Breaking: Marked the
UseReadStoreFor<,,,>
configuration methods as obsolete,
in favor of the simpler overloads with less type parameters (as those automatically
figure out the AggregateRoot and Id types and configure the more reliable
SingleAggregateReadStoreManager
implementation) - Obsolete: The class
AsyncHelper
and all non-async methods using it have been
marked obsolete and will be removed in EventFlow 1.0 (not planned yet). If you rely
on these non-async methods, then merely copy-paste theAsyncHelper
from the EventFlow
code base and continue using it in your transition to async only - Fixed: An issue where
EntityFrameworkEventPersistence
could possibly save aggregate
events out of order, which would lead to out-of-order application when streaming events
ordered by GlobalSequenceNumber - New:
FilesEventPersistence
now uses relative paths - New: A new set of hook-in interfaces are provided from this release, which should
make it easier to implement crash resilience (#439) in EventFlow. Please note that
this new API is experimentational and subject to change as different strategies are
implementedIAggregateStoreResilienceStrategy
IDispatchToReadStoresResilienceStrategy
IDispatchToSubscriberResilienceStrategy
ISagaUpdateResilienceStrategy
v0.79.4216
- New: Added .NET Core 3.1 target for the
EventFlow
andEventFlow.EntityFramework
packages - Added quoting to the SQL query generator for the column names
v0.78.4205
- New: Updated LibLog provider to support structured logging with NLog 4.5.
Reduced memory allocations for log4net-provider - New: Made several methods in
AggregateRoot<,>
virtual
to allow
easier customization - Fixed: Added quoting to the SQL query generator for the column names
-- query before the fix
UPDATE [ReadModel-TestAttributes]
SET UpdatedTime = @UpdatedTime
WHERE Id = @Id
-- query after the fix
UPDATE [ReadModel-TestAttributes]
SET [UpdatedTime] = @UpdatedTime
WHERE [Id] = @Id
- Fixed: Do not log about event upgraders if none is found for an event
- Fixed: Add default
null
predicate toAddCommands
andAddJobs
v0.77.4077
- New: The
EventFlow.AspNetCore
NuGet package now has ASP.NET Core 3 support
v0.76.4014
- New: Mongo DB read model store Queryable:
MongoDbReadModelStore readModelStore; IQueryable<TReadModel> queryable = readModelStore.AsQueryable();
- New: Moved publish of messages in
RabbitMqPublisher
to a new virtual
method to ease reuse and customization - Fixed: MongoDB read models no longer has the
new()
generic requirement,
which aligns read model requirements with the rest of EventFlow
v0.75.3970
- Fix: When deserializing the JSON value
"null"
into a struct value like
int
, theSingleValueObjectConverter
threw an exception instead of
merely returningnull
representing an absentSingleValueObject<int>
value
v0.74.3948
- Breaking: Renamed
AspNetCoreEventFlowOptions.AddMetadataProviders()
toAddDefaultMetadataProviders()
and madeAddUserClaimsMetadata
opt-in
in order to prevent policy issues. - Fix: Allow explicit implementations of
IEmit<>
in aggregate roots - Fix: Using
.AddAspNetCore()
with defaults now doesn't throw a DI
exception.
v0.73.3933
- New: Configure JSON serialization:
EventFlowOptions.New. .ConfigureJson(json => json .AddSingleValueObjects() .AddConverter<SomeConverter>() )
- New: ASP.NET Core enhancements:
- New fluent configuration API for ASP.NET Core components:
services.AddEventFlow(o => o.AddAspNetCore(c => {...}));
(old syntax
AddAspNetCoreMetadataProviders
is now deprecated). .RunBootstrapperOnHostStartup()
runs bootstrappers together with ASP.NET
host startup. Previously, this was done inAddAspNetCoreMetadataProviders
and led to some confusion..UseMvcJsonOptions()
adds EventFlow JSON configuration (see below) to ASP.NET Core,
so you can accept and return Single Value Objects as plain strings for example..Add{Whatever}Metadata()
configures specific metadata provider..AddUserClaimsMetadata(params string claimTypes)
configures the new claims metadata
provider (for auditing or "ChangedBy" in read models)..UseLogging()
configures an adapter for Microsoft.Extensions.Logging.UseModelBinding()
adds model binding support for Single Value Objects:[HttpGet("customers/{id}")] public async Task<IActionResult> SingleValue(CustomerId id) { if (!ModelState.IsValid) { return BadRequest(ModelState); }
- New fluent configuration API for ASP.NET Core components:
- Fix: ASP.NET Core
AddRequestHeadersMetadataProvider
doesn't throw when
HttpContext is null. - Fix:
ReadModelRepopulator
now correctly populatesIAmAsyncReadModelFor