private Specification ReplaceValue <TSpec>( KeyValueSpecification specification, SpecificationValue specValue, Func <SpecificationValue, TSpec> factory, Func <Specification> baseFactory) where TSpec : KeyValueSpecification { if (specValue.IsReference) { string key = specValue.Values.Single().ToString(); if (SpecificationValue.TryFrom(key, this.Values, this.Settings.ValueSettings, out SpecificationValue sv, out string error)) { return(factory(sv)); } if (sv != null && this.Settings.AllowedUnresolvedValueReferenceKeys.Contains(sv.Values.Single().ToString())) { return(factory(sv)); } if (this.Settings.AllowedUnresolvedValueReferenceKeys.Contains(specValue.Values.Single().ToString())) { return(baseFactory()); } if (this.Settings.ThrowValueErrors) { throw new InvalidOperationException( string.Format(SpecAbsRes.MissingReference, specification, error)); } } return(baseFactory()); }
private void WriteKeyValueSpecification(KeyValueSpecification specification, string name) { this.XmlWriter.WriteStartElement(name, this.NameSpace); this.WriteKey(specification.Key); this.WriteValue(specification.Value); this.XmlWriter.WriteEndElement(); }