public ProcessStateActor(IAggregateCommandsHandler <ProcessStateAggregate <TState> > handler,
                          ISnapshotsPersistencePolicy snapshotsPersistencePolicy,
                          IConstructAggregates aggregateConstructor,
                          IConstructSnapshots snapshotsConstructor,
                          IActorRef customHandlersActor) : base(handler,
                                                                snapshotsPersistencePolicy,
                                                                aggregateConstructor,
                                                                snapshotsConstructor,
                                                                customHandlersActor)
 {
 }
示例#2
0
 public AggregateActor(IAggregateCommandsHandler <TAggregate> handler,
                       ISnapshotsPersistencePolicy snapshotsPersistencePolicy,
                       IConstructAggregates aggregateConstructor,
                       IConstructSnapshots snapshotsConstructor,
                       IActorRef customHandlersActor) : base(aggregateConstructor, snapshotsConstructor, snapshotsPersistencePolicy)
 {
     _aggregateCommandsHandler = handler;
     _publisher                    = Context.System.GetTransport();
     _customHandlersActor          = customHandlersActor;
     _domainEventProcessEntry      = new ProcessEntry(Self.Path.Name, AggregateActorConstants.PublishingEvent, AggregateActorConstants.CommandExecutionCreatedAnEvent);
     _domainEventProcessFailEntry  = new ProcessEntry(Self.Path.Name, AggregateActorConstants.CommandExecutionFinished, AggregateActorConstants.CommandRaisedAnError);
     _commandCompletedProcessEntry = new ProcessEntry(Self.Path.Name, AggregateActorConstants.CommandExecutionFinished, AggregateActorConstants.ExecutedCommand);
     Behavior.Become(AwaitingCommandBehavior, nameof(AwaitingCommandBehavior));
 }
示例#3
0
        public AggregateActor(IAggregateCommandsHandler<TAggregate> handler,
                              TypedMessageActor<ScheduleCommand> schedulerActorRef,
                              TypedMessageActor<Unschedule> unscheduleActorRef,
                              IPublisher publisher,
                              ISnapshotsPersistencePolicy snapshotsPersistencePolicy,
                              IConstructAggregates aggregateConstructor) : base(
                                                                            aggregateConstructor,
                                                                            snapshotsPersistencePolicy,
                                                                            publisher)
        {
            _schedulerActorRef = schedulerActorRef;
            _unscheduleActorRef = unscheduleActorRef;
            _handler = handler;

            //async aggregate method execution finished, aggregate already raised events
            //need process it in usual way
            Command<IMessageMetadataEnvelop<AsyncEventsReceived>>(d =>
            {
                var m = d.Message;
                Monitor.IncrementMessagesReceived();
                if (m.Exception != null)
                {
                    ProcessFault(m.Command, m.Exception, d.Metadata);
                    return;
                }

                (State as Aggregate).FinishAsyncExecution(m.InvocationId);
                ProcessAggregateEvents(m.Command, d.Metadata);
            });

            Command<IMessageMetadataEnvelop<ICommand>>(m =>
            {
                var cmd = m.Message;
                Monitor.IncrementMessagesReceived();
                _log.Trace("{Aggregate} received a {@command}", State.Id, cmd);
                try
                {
                    State = _handler.Execute((TAggregate)State, cmd);
                }
                catch (Exception ex)
                {
                    ProcessFault(cmd, ex, m.Metadata);
                    return;
                }

                ProcessAggregateEvents(cmd, m.Metadata);
            });
        }
 public static AggregateScenario <TAggregate> New <TAggregate>(IAggregateCommandsHandler <TAggregate> handler) where TAggregate : Aggregate
 {
     return(new AggregateScenario <TAggregate>(CreateAggregate <TAggregate>(), handler));
 }
        public static DefaultAggregateDependencyFactory <TAggregate> New <TAggregate>(IAggregateCommandsHandler <TAggregate> handler, IMessageRouteMap mapProducer = null) where TAggregate : IAggregate
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            var map = mapProducer ?? MessageRouteMap.New(handler);

            return(new DefaultAggregateDependencyFactory <TAggregate>(() => handler, () => map));
        }