public bool Handle(DomainEventHandlerData <CreateSoldierEvent> data) { GameAggregate snapshot = data.Snapshot as GameAggregate; if (snapshot == null) { return(false); } if (data.EventObject.Army == Army.Blue) { if (snapshot.UserSoldiers == null) { snapshot.UserSoldiers = new List <SoldierAggregate>(); } ++snapshot.UserSoldiersAmount; } else { if (snapshot.OpponentSoldiers == null) { snapshot.OpponentSoldiers = new List <SoldierAggregate>(); } ++snapshot.OpponentSoldierAmount; } SoldierAggregate soldierAggregate = new SoldierAggregate { Id = Guid.NewGuid() }; var castleTroopType = snapshot.GetTroopTypeData(data.EventObject.Army, data.EventObject.TroopType); if (castleTroopType != null) { soldierAggregate.CastleTroopType = castleTroopType; if (data.EventObject.Army == Army.Blue) { snapshot.UserSoldiers.Add(soldierAggregate); } else { snapshot.OpponentSoldiers.Add(soldierAggregate); } } _gameDomainService.CreateSoldierIfNeed(snapshot, data.EventObject.Army); return(true); }