public function let(UnitOfWork $unitOfWork, UnitOfWorkEventRegistrationCallbackFactory $eventRegistrationCallbackFactory, AggregateRoot $aggregateRoot1, AggregateRoot $aggregateRoot2, EventBus $eventBus, SaveAggregateCallback $saveAggregateCallback, EventRegistrationCallback $eventRegistrationCallback) { $eventRegistrationCallbackFactory->create(Argument::any(), Argument::any())->willReturn($eventRegistrationCallback); $this->beConstructedWith($unitOfWork, $eventRegistrationCallbackFactory); $this->add($aggregateRoot1, $eventBus, $saveAggregateCallback); $this->add($aggregateRoot2, $eventBus, $saveAggregateCallback); }
/** * @param AggregateRoot $aggregateRoot * @param EventBus $eventBus * @param SaveAggregateCallback $saveAggregateCallback * * @return AggregateRoot */ public function add(AggregateRoot $aggregateRoot, EventBus $eventBus, SaveAggregateCallback $saveAggregateCallback) { $previouslyRegisteredAggregateRoot = $this->findSimilarAggregateRoot($aggregateRoot); if (null !== $previouslyRegisteredAggregateRoot) { return $previouslyRegisteredAggregateRoot; } $aggregateRootHash = $this->getAggregateRootHash($aggregateRoot); $this->aggregateRoots[$aggregateRootHash] = $aggregateRoot; $this->aggregateRootSaveCallbacks[$aggregateRootHash] = $saveAggregateCallback; $eventRegistrationCallback = $this->eventRegistrationCallbackFactory->create($this->unitOfWork, $eventBus); $aggregateRoot->addEventRegistrationCallback($eventRegistrationCallback); return $aggregateRoot; }