@@ -38,22 +38,6 @@ public EventQueue(IEnumerable<IAggregateRoot> aggregates, IViewPublisher viewPub
3838 this . viewPublisher = viewPublisher ?? throw new ArgumentNullException ( nameof ( viewPublisher ) ) ;
3939 }
4040
41- /// <summary>
42- /// Determines whether the specified aggregate can handle events of the given type.
43- /// </summary>
44- /// <param name="aggregate">The aggregate root to check. Must implement <see cref="IAggregateRoot"/>.</param>
45- /// <param name="eventType">The type of the event to check for handling capability. Cannot be <see langword="null"/>.</param>
46- /// <returns><see langword="true"/> if the aggregate can handle events of the specified type; otherwise, <see
47- /// langword="false"/>.</returns>
48- internal static bool CanHandle ( IAggregateRoot aggregate , Type eventType )
49- {
50- if ( aggregate == null || eventType == null )
51- return false ;
52-
53- var handlerType = typeof ( IEventHandler < > ) . MakeGenericType ( eventType ) ;
54- return handlerType . IsAssignableFrom ( aggregate . GetType ( ) ) ;
55- }
56-
5741 /// <summary>
5842 /// Enqueues an event in order to publish to subcribers.
5943 /// </summary>
@@ -66,18 +50,21 @@ public async Task Enqueue<TEvent>(TEvent @event)
6650 if ( @event == null )
6751 throw new ArgumentNullException ( nameof ( @event ) ) ;
6852
53+ await viewPublisher . Publish ( @event ) ;
54+
6955 var tasks = new List < Task > ( ) ;
7056
7157 foreach ( var aggregate in aggregates )
7258 {
73- if ( ! CanHandle ( aggregate , @event . GetType ( ) ) )
59+ var handlerType = typeof ( IEventHandler < > ) . MakeGenericType ( @event . GetType ( ) ) ;
60+ if ( ! handlerType . IsAssignableFrom ( aggregate . GetType ( ) ) )
7461 continue ;
7562
7663 var method = typeof ( IEventHandler < > )
7764 . MakeGenericType ( @event . GetType ( ) )
7865 . GetMethod ( nameof ( IEventHandler < TEvent > . Handle ) ) ;
7966
80- var task = ( Task ) method . Invoke ( this , new object [ ] { @event } ) ;
67+ var task = ( Task ) method . Invoke ( aggregate , new object [ ] { @event } ) ;
8168
8269 logger ? . LogInformation ( "Action=Event_Enqueue, Event={Event}, Aggregate={Aggregate}, Handler:{Handler}" ,
8370 @event . GetType ( ) . Name , aggregate . GetType ( ) . Name , method . Name ) ;
@@ -86,7 +73,6 @@ public async Task Enqueue<TEvent>(TEvent @event)
8673 }
8774
8875 await Task . WhenAll ( tasks ) ;
89- await viewPublisher . Publish ( @event ) ;
9076 }
9177 }
9278}
0 commit comments