public Specification ResolveSpecificationRefs( IReadOnlyDictionary <string, object> values, ReferenceResolutionSettings settings = null) { SpecificationReferenceVisitor visitor = new SpecificationReferenceVisitor(values, settings); return(visitor.Visit(this)); }
public void ResolveSpecPartial() { ReferenceSpecification referenceSpecification = new ReferenceSpecification("qwe"); ReferenceSpecification refSpec = new ReferenceSpecification("qwe2"); Dictionary <string, object> values = new Dictionary <string, object> { { "qwe", refSpec } }; ReferenceResolutionSettings settings = new ReferenceResolutionSettings(); settings.AllowedUnresolvedSpecificationReferenceKeys.Add("qwe2"); Specification resolved = referenceSpecification.ResolveSpecificationRefs(values, settings); Assert.Same(refSpec, resolved); }
public void ResolveValueRefPartial() { AndSpecification and = new AndSpecification( new EqualSpecification("qwe", SpecificationValue.Single(1)), new LessOrEqualSpecification("qwe", SpecificationValue.Ref("qwe"))); Dictionary <string, object> values = new Dictionary <string, object> { { "qwe", SpecificationValue.Ref("qwe2") }, }; ReferenceResolutionSettings settings = new ReferenceResolutionSettings(); settings.AllowedUnresolvedValueReferenceKeys.Add("qwe2"); AndSpecification resolved = and.ResolveValueRefs( values, settings); var kv = Assert.IsType <LessOrEqualSpecification>(resolved.Specifications.Last()); Assert.True(kv.Value.IsReference); Assert.Equal("qwe2", kv.Value.Values.Single()); }
public ValueReferenceVisitor(IReadOnlyDictionary <string, object> values, ReferenceResolutionSettings settings = null) { this.Values = values ?? throw new ArgumentNullException(nameof(values)); this.Settings = settings ?? ReferenceResolutionSettings.Default; }