Ejemplo n.º 1
0
        /// <summary>
        /// Optionally reates a snapshot of the aggregate root
        /// </summary>
        /// <param name="aggregateRoot">Aggregate root instance to snapshot</param>
        internal void CreateSnapshot(AggregateRoot aggregateRoot)
        {
            if (!(aggregateRoot is IAggregateRootWithSnapshot))
            {
                return;
            }

            var dynamicRoot = aggregateRoot.AsDynamic();

            // Only create a snapshot of the root requires it
            if (!dynamicRoot.ShouldCreateSnapshot())
            {
                return;
            }

            var snapshot = ((IAggregateRootWithSnapshot)aggregateRoot).CreateGenericSnapshot();

            if (snapshot == null)
            {
                return;
            }

            // Dynamically invoke the SaveSnapshot<T> method of the snapshot store
            _snapshotStore.InvokeGenericMethod("SaveSnapshot", ((IAggregateRootWithSnapshot)aggregateRoot).GetGenericType(), snapshot);
        }
Ejemplo n.º 2
0
        private Task TryMakeSnapshot(AggregateRoot aggregate)
        {
            if (!_snapshotStrategy.ShouldMakeSnapShot(aggregate))
            {
                return(Task.CompletedTask);
            }
            var snapshot = aggregate.AsDynamic().GetSnapshot();

            snapshot.Version = aggregate.Version + aggregate.GetUncommittedChanges().Length;
            return(_snapshotStore.Save(snapshot));
        }
Ejemplo n.º 3
0
        private void TryMakeSnapshot(AggregateRoot aggregate)
        {
            if (!_snapshotStrategy.ShouldMakeSnapShot(aggregate))
            {
                return;
            }
            var snapshot = aggregate.AsDynamic().GetSnapshot().RealObject;

            snapshot.Version = aggregate.Version + aggregate.GetUncommittedChanges().Count();
            _snapshotStore.Save(snapshot);
        }