public virtual AggregateRoot RestoreFromSnapshot(Snapshot snapshot) { if (snapshot == null || !snapshot.IsValid()) { return(null); } var aggregateRoot = _aggregateRootFactory.CreateAggregateRoot(snapshot.AggregateRootType); if (!IsSnapshotable(aggregateRoot)) { throw new InvalidOperationException(string.Format("聚合根({0})没有实现ISnapshotable接口或者实现了多余1个的ISnapshotable接口,不能将其从某个快照还原。", aggregateRoot.GetType().FullName)); } if (GetSnapshotDataType(aggregateRoot) != snapshot.Data.GetType()) { throw new InvalidOperationException(string.Format("当前聚合根的快照类型({0})与要还原的快照类型({1})不符", GetSnapshotDataType(aggregateRoot), snapshot.Data.GetType())); } aggregateRoot.InitializeFromSnapshot(snapshot); SnapshotterHelper.RestoreFromSnapshot(snapshot.Data, aggregateRoot); return(aggregateRoot); }
/// <summary> /// 从给定的快照还原聚合根 /// </summary> public virtual AggregateRoot RestoreFromSnapshot(Snapshot snapshot) { if (snapshot == null || !snapshot.IsValid()) { return(null); } AggregateRoot aggregateRoot = _aggregateRootFactory.CreateAggregateRoot(snapshot.AggregateRootType); if (!IsSnapshotable(aggregateRoot)) { throw new InvalidOperationException(string.Format("聚合根({0})没有实现ISnapshotable接口或者实现了多余1个的ISnapshotable接口,不能将其从某个快照还原。", aggregateRoot.GetType().FullName)); } if (GetSnapshotType(aggregateRoot) != snapshot.Data.GetType()) { throw new InvalidOperationException(string.Format("当前聚合根的快照类型({0})与要还原的快照类型({1})不符", GetSnapshotType(aggregateRoot), snapshot.Data.GetType())); } aggregateRoot.InitializeFromSnapshot(snapshot); var internalSnapshotterType = typeof(InternalSnapshotter <>).MakeGenericType(snapshot.Data.GetType()); internalSnapshotterType.GetMethod("RestoreFromSnapshot").Invoke(Activator.CreateInstance(internalSnapshotterType), new object[] { aggregateRoot, snapshot.Data }); return(aggregateRoot); }