Source Generation
EventFlow provides source generators to reduce boilerplate code when working with aggregates. This makes your code cleaner and easier to maintain.
How to use
Add EventFlow.SourceGenerators package.
1 |
|
Add the AggregateExtensions
attribute to your aggregate class. The C# compiler will automatically generate the necessary source code.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
How it helps
Without source generators, you must specify the aggregate type and identity type explicitly in multiple places.
-
Event declaration.
1 2
public class OrderCreated : IAggregateEvent<OrderAggregate, OrderAggregateId>
-
Subscriber declaration.
1 2
public class OrderAggregateSubscribers : ISubscribeSynchronousTo<OrderAggregate, OrderAggregateId, OrderCreated>
-
Usage of
IAggregateStore
.1 2 3 4 5
await aggregateStore.UpdateAsync<OrderAggregate, OrderAggregateId>( id, SourceId.New, (order, _) => order.DoSomething(), cancellationToken);
-
Usage of
IEventStore
.1 2
var events = await eventStore.LoadEventsAsync<OrderAggregate, OrderAggregateId>( id, cancellationToken);
Using source generators simplifies the code by omitting the aggregate and identity types.
-
Event declaration.
1
public class OrderCreated : OrderAggregateEvent
-
Subscriber declaration.
1 2
public class OrderAggregateSubscribers : ISubscribeSynchronousTo<OrderCreated>
-
Usage of
IAggregateStore
.1 2 3 4
await aggregateStore.UpdateAsync( id, order => order.DoSomething(), cancellationToken);
-
Usage of
IEventStore
.1
var events = await eventStore.LoadEventsAsync(id, cancellationToken);