コード例 #1
0
 public static SnapshotItem FromDomainSnapshot(IAggregateSnapshot snapshot)
 {
     return(new SnapshotItem()
     {
         Id = snapshot.Id.ToString(),
         AggregateId = snapshot.Id.ToString(),
         Version = snapshot.Version,
         SnapshotType = $"{snapshot.GetType().FullName}, {snapshot.GetType().Assembly.GetName().Name}",
         Data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(snapshot)),
         DateTime = DateTime.Now
     });
 }
コード例 #2
0
ファイル: SagaState.cs プロジェクト: youngce/Akkatecture
        public bool Hydrate(
            TSaga aggregate,
            IAggregateSnapshot <TSaga, TIdentity> aggregateSnapshot)
        {
            var aggregateSnapshotType = aggregateSnapshot.GetType();
            Action <TMessageApplier, IAggregateSnapshot> hydrater;

            if (!HydrateMethods.TryGetValue(aggregateSnapshotType, out hydrater))
            {
                return(false);
            }

            hydrater((TMessageApplier)(object)this, aggregateSnapshot);
            return(true);
        }
コード例 #3
0
        protected virtual void HydrateSnapshot(IAggregateSnapshot <TAggregate, TIdentity> aggregateSnapshot, long version)
        {
            var snapshotType = aggregateSnapshot.GetType();

            if (_snapshotHandlers.ContainsKey(snapshotType))
            {
                _snapshotHandlers[snapshotType](aggregateSnapshot);
            }
            else if (_snapshotHydraters.Any(ea => ea.Hydrate((TAggregate)this, aggregateSnapshot)))
            {
                // Already done
            }

            var snapshotHydrater = GetSnapshotHydrateMethods(aggregateSnapshot);

            snapshotHydrater(aggregateSnapshot);

            Version = version;
        }