/// <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); }
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)); }
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); }