public void Collect() { Fx.AssertAndThrow(_expectedStage == Stage.Collect, "Collect called at the wrong time."); _expectedStage = Stage.None; foreach (IPersistencePipelineModule module in _modules) { IDictionary <XName, object> readWriteValues; IDictionary <XName, object> writeOnlyValues; module.CollectValues(out readWriteValues, out writeOnlyValues); if (readWriteValues != null) { foreach (KeyValuePair <XName, object> value in readWriteValues) { try { _values.Add(value.Key, new InstanceValue(value.Value)); } catch (ArgumentException exception) { throw Fx.Exception.AsError(new InvalidOperationException(SRCore.NameCollisionOnCollect(value.Key, module.GetType().Name), exception)); } } } if (writeOnlyValues != null) { foreach (KeyValuePair <XName, object> value in writeOnlyValues) { try { _values.Add(value.Key, new InstanceValue(value.Value, InstanceValueOptions.Optional | InstanceValueOptions.WriteOnly)); } catch (ArgumentException exception) { throw Fx.Exception.AsError(new InvalidOperationException(SRCore.NameCollisionOnCollect(value.Key, module.GetType().Name), exception)); } } } } _expectedStage = Stage.Map; }