public void PossibleToLoadFromEvents() { var user = AggregateCreator.CreateAggregateRoot <User>(); var created = new UserCreatedEvent() { UserId = "3333", Email = "*****@*****.**", FirstName = "John", LastName = "Melinda" }; var changed = new UserNameChangedEvent() { UserId = "3333", FirstName = "John Jr.", LastName = "Melinda III" }; user.LoadFromEvents(new List <IEvent> { created, changed }); Assert.AreEqual(user.Id, created.UserId); Assert.AreEqual(user.Version, 1); Assert.AreEqual(GetPrivateValue <String>(user, "_firstName"), changed.FirstName); Assert.AreEqual(GetPrivateValue <String>(user, "_lastName"), changed.LastName); Assert.AreEqual(GetPrivateValue <String>(user, "_email"), created.Email); }
public TAggregateRoot Create <TAggregateRoot>() where TAggregateRoot : IProcess { var aggregate = AggregateCreator.CreateAggregateRoot <TAggregateRoot>(); /* var aggregateInterface = typeof(TAggregateRoot).GetInterface(typeof(IAggregateRoot<,>).FullName); * * var args = aggregateInterface.GetGenericArguments(); * var aggregateStateType = args[1]; * var state = (IAggregateState) Activator.CreateInstance(aggregateStateType); * * aggregate.Initialize(state);*/ return(aggregate); }
public TAggregate GetById <TAggregate>(String id) where TAggregate : AggregateRoot { if (String.IsNullOrEmpty(id)) { throw new ArgumentException("Aggregate id was not specified."); } var stream = _transitionStorage.OpenStream(id); var obj = AggregateCreator.CreateAggregateRoot <TAggregate>(); obj.LoadFromTransitionStream(stream); return(obj); }
public TAggregate GetById <TAggregate>(String id) where TAggregate : Aggregate { if (String.IsNullOrEmpty(id)) { throw new ArgumentException(String.Format( "Aggregate ID was not specified when trying to get by id {0} aggregate", typeof(TAggregate).FullName)); } var transitions = _transitionStorage.GetTransitions(id, 0, int.MaxValue); var aggregate = AggregateCreator.CreateAggregateRoot <TAggregate>(); var state = AggregateCreator.CreateAggregateState(typeof(TAggregate)); StateSpooler.Spool((AggregateState)state, transitions); aggregate.Setup(state, transitions.Count == 0 ? 0 : transitions.Last().Id.Version); return(aggregate); }
public TAggregate GetById <TAggregate>(String id) where TAggregate : AggregateRoot { if (String.IsNullOrEmpty(id)) { throw new ArgumentException("Aggregate id was not specified."); } Snapshot snapshot = null; if (_snapshotRepository != null) { snapshot = _snapshotRepository.Load <TAggregate>(id); } var obj = snapshot == null ? AggregateCreator.CreateAggregateRoot <TAggregate>() : (TAggregate)snapshot.Payload; var fromVersion = snapshot == null ? 0 : snapshot.StreamVersion + 1; var stream = _transitionStorage.OpenStream(id, fromVersion, int.MaxValue); obj.LoadFromTransitionStream(stream); return(obj); }