protected void ApplyChange(Event domainEvent) { domainEvent.AggregateId = Id; domainEvent.Version = ++EventVersion; Apply(domainEvent); _changes.Add(domainEvent); }
public async void PassSubscriptionWithNonGenericParameter() { var messageBus = new MessageBus(); var expected = new Event(); Event actual = null; messageBus.Subscribe<Event>((e) => actual = e); await messageBus.Publish(expected); Assert.Equal(expected, actual); }
public void GetAnAggregateWithSomeEventsReturnsEvents() { var aggregateId = Guid.NewGuid(); var @event = new Event(); var storageMock = new EventStoreMock().SeedEvents(aggregateId, @event); var repository = new Repository<AggregateRootMock>(storageMock); var rootMock = new AggregateRootMock(aggregateId); rootMock.SomeEvent(@event); repository.Save(rootMock, 0); var actualRoot = repository.GetById(aggregateId); Assert.Equal(@event, actualRoot.MyEvent); }
public void SavingAnAggregateWithSomeEventsStoresThoseEventsInTheEventStore() { var storageMock = new EventStoreMock(); var repository = new Repository<AggregateRootMock>(storageMock); var rootMock = new AggregateRootMock(Guid.NewGuid()); var @event = new Event(); rootMock.SomeEvent(@event); repository.Save(rootMock, 0); storageMock.AssertSaveCalls(1); Assert.Equal(@event, rootMock.MyEvent); Assert.Equal(1, storageMock.LatestEvents.Count()); var storedEvent = storageMock.LatestEvents.First(); Assert.Equal(@event, storedEvent); }
public void SomeEvent(Event @event, object a = null) { ApplyChange(@event); }
protected void OnEvent(Event @event) { MyEvent = @event; }
protected void Apply(Event domainEvent) { //var eventType = domainEvent.GetType(); //string methodName = $"On{eventType.GetNonGenericName()}"; this.InvokeMethodMatchingParameters(domainEvent); //var methodInfo = this // .GetMethodInfoMatchingSignature(methodName, domainEvent) // .FirstOrDefault(); //foreach (var entity in _entities) //{ // if (methodInfo != null) // { // break; // } // methodInfo = entity. // GetMethodInfoMatchingSignature(methodName, domainEvent) // .FirstOrDefault(); //} foreach (var entity in _entities) { entity.InvokeMethodMatchingParameters(domainEvent); } //I'm not sure if this will work here... //if (eventType.IsConstructedGenericType) //{ // var genericTypeParameters = eventType.GenericTypeArguments; // methodInfo = methodInfo.MakeGenericMethod(genericTypeParameters); //} //methodInfo.Invoke(this, new object[] { domainEvent }); }