public void Intercept(IInvocation invocation) { var method = invocation.Method.Name; _counter++; var historyRecord = $"{_counter}:{method}"; var index = _flowData.CallHistory.IndexOf(historyRecord); if (index == -1) { // new call, proceed and update histories if no exceptions thrown invocation.Proceed(); _flowData.CallHistory.Add(historyRecord); // Clone Model to store new independednt instance _flowData.ModelHistory.Add(_flow.UntypedModel.CloneObject()); } else { // replay in vacuum: don't proceed call and substitute model for next call _flow.SetModel(_flowData.ModelHistory[index]); } }