Skip to content

Releases: eventflow/EventFlow

v0.50.3124

21 Oct 18:05
Compare
Choose a tag to compare
  • New: While EventFlow tries to limit the about of painful API changes, the
    introduction of execution/command results are considered a necessary step
    towards as better API.

    Commands and command handlers have been updated to support execution
    results. Execution results is meant to be an alternative to throwing domain
    exceptions to do application flow. In short, before you were required to
    throw an exception if you wanted to abort execution and "return" a failure
    message.

    The introduction of execution results changes this, as it allows
    returning a failed result that is passed all the way back to the command
    publisher. Execution results are generic and can thus contain e.g. any
    validation results that a UI might need. The ICommandBus.PublishAsync
    signature has changed to reflect this.

    from

        Task<ISourceId> PublishAsync<TAggregate, TIdentity, TSourceIdentity>(
          ICommand<TAggregate, TIdentity, TSourceIdentity> command)
          where TAggregate : IAggregateRoot<TIdentity>
          where TIdentity : IIdentity
          where TSourceIdentity : ISourceId

    to

        Task<TExecutionResult> PublishAsync<TAggregate, TIdentity, TExecutionResult>(
          ICommand<TAggregate, TIdentity, TExecutionResult> command,
          CancellationToken cancellationToken)
          where TAggregate : IAggregateRoot<TIdentity>
          where TIdentity : IIdentity
          where TExecutionResult : IExecutionResult

    Command handler signature has changed from

        Task ExecuteAsync(
            TAggregate aggregate,
            TCommand command,
            CancellationToken cancellationToken);

    to

        Task<TExecutionResult> ExecuteCommandAsync(
            TAggregate aggregate,
            TCommand command,
            CancellationToken cancellationToken)

    Migrating to the new structure should be seamless if your current code base
    inherits its command handlers from the provided CommandHandler<,,> base
    class.

  • Breaking: Source IDs on commands have been reworked to "make room" for
    execution results on commands. The generic parameter from ICommand<,,>
    and ICommandHandler<,,,> has been removed in favor of the new execution
    results. ICommand.SourceId is now of type ISourceId instead of using
    the generic type and the ICommandBus.PublishAsync no longer returns
    Task<ISourceId>

    To get code that behaves similar to the previous version, simply take the
    ISourceId from the command, i.e., instead of this

    var sourceId = await commandBus.PublishAsync(command);

    write this

    await commandBus.PublishAsync(command);
    var sourceId = command.SourceId;

    (CancellationToken and .ConfigureAwait(false) omitted fromt he above)

  • Breaking: Upgraded NuGet dependency on RabbitMQ.Client from >= 4.1.3
    to >= 5.0.1

v0.49.3031

07 Sep 06:06
Compare
Choose a tag to compare
  • Breaking: Upgraded EventStore.Client dependency to version 4.0
  • Breaking: Changed target framework for EventFlow.EventStores.EventStore to
    .NET 4.6.2 as required by EventStore.Client NuGet dependency
  • Fix: EventFlow.Hangfire now depends on Hangfire.Core instead of
    Hangfire
  • New: Added an overload to IDomainEventPublisher.PublishAsync that isn't
    generic and doesn't require an aggregate ID
  • New: Added IReadModelPopulator.DeleteAsync that allows deletion of single
    read models
  • Obsolete: IDomainEventPublisher.PublishAsync<,> (generic) in favor of the
    new less restrictive non-generic overload

v0.48.2937

11 Jul 05:42
Compare
Choose a tag to compare
  • Breaking: Moved non-async methods on IReadModelPopulator to extension
    methods
  • New: Added non-generic overloads for purge and populate methods on
    IReadModelPopulator
  • New: Provided EventFlow.TestHelpers which contains several test suites
    that is useful when developing event and read model stores for EventFlow.
    The package is an initial release and its interface is unstable and
    subject to change
  • New: Now possible to configure retry delay for MSSQL error 40501 (server
    too busy) using IMsSqlConfiguration.SetServerBusyRetryDelay(RetryDelay)
  • New: Now possible to configure the retry count of transient exceptions for
    MSSQL and SQLite using the ISqlConfiguration.SetTransientRetryCount(int)
  • Fixed: Added MSSQL error codes 10928, 10929, 18401 and 40540 as well
    as a few native Win32Exception exceptions to the list treated as transient
    errors, i.e., EventFlow will automatically retry if the server returns one
    of these

v0.47.2894

29 Jun 04:54
Compare
Choose a tag to compare
  • New: To be more explicit, IEventFlowOpions.AddSynchronousSubscriber<,,,> and
    IEventFlowOpions.AddAsynchronousSubscriber<,,,> generic methods
  • Fix: IEventFlowOpions.AddSubscriber, IEventFlowOpions.AddSubscribers and
    IEventFlowOpions.AddDefaults now correctly registers implementations of
    ISubscribeAsynchronousTo<,,>
  • Obsolete: IEventFlowOpions.AddSubscriber is marked obsolete in favor of its
    explicite counterparts

v0.46.2886

29 May 18:27
Compare
Choose a tag to compare
  • Fix: EventFlow now uses a Autofac lifetime scope for validating service
    registrations when IEventFlowOpions.CreateResolver(true) is invoked.
    Previously services were created but never disposed as they were resolved
    using the root container

v0.45.2877

28 May 17:41
Compare
Choose a tag to compare
  • Breaking: Asynchronous subscribers are now disabled by default, i.e.,
    any implementations of ISubscribeAsynchronousTo<,,> wont get invoked
    unless enabled
    eventFlowOptions.Configure(c => IsAsynchronousSubscribersEnabled = true);
    
    the ITaskRunner has been removed and asynchronous subscribers are now
    invoked using a new scheduled job that's scheduled to run right after the
    domain events are emitted. Using the ITaskRunner led to unexpected task
    terminations, especially if EventFlow was hosted in IIS. If enabling
    asynchronous subscribers, please make sure to configure proper job
    scheduling, e.g. by using the EventFlow.Hangfire NuGet package. The default
    job scheduler is InstantJobScheduler, which executes jobs synchronously,
    giving a end result similar to that of synchronous subscribers
  • Breaking: InstantJobScheduler, the default in-memory scheduler if nothing
    is configured, now swallows all job exceptions and logs them as errors. This
    ensure that the InstantJobScheduler behaves as any other out-of-process
    job scheduler

v0.44.2832

12 May 19:29
Compare
Choose a tag to compare
  • New: .NET Standard 1.6 support for the following NuGet packages
    • EventFlow
    • EventFlow.Autofac
    • EventFlow.Elasticsearch
    • EventFlow.Hangfire
    • EventFlow.RabbitMQ
  • Fixed: Removed dependency Microsoft.Owin.Host.HttpListener from
    EventFlow.Owin as it doesn't need it

v0.43.2806

05 May 06:57
Compare
Choose a tag to compare
  • Breaking: Updated all NuGet package dependencies to their latest versions
  • New: EventFlow now embeds PDB and source code within the assemblies using
    SourceLink (GitLink now removed)

v0.42.2755

02 May 19:30
Compare
Choose a tag to compare
  • Fixed: The deterministic IDomainEvent.Metadata.EventId is now correctly
    based on the both the aggregate identity and the aggregate sequence number,
    instead of merely the aggregate identity
  • Fixed: GitLink PDB source URLs

v0.41.2727

01 May 06:20
Compare
Choose a tag to compare
  • New: NuGet packages now contain PDB files with links to GitHub
    (thanks to GitLink). Be sure
    to check Enable source server support to be able to step through
    the EventFlow source code. See GitLink documentation for details
  • Fixed: Fixed a bug in how EventFlow registers singletons with Autofac
    that made Autofac invoke IDisposable.Dispose() upon disposing
    lifetime scopes