public object ApplyConfig(INode node) { var config = _configs.SingleOrDefault(c => c.Matches(node)); if (config != null) { var vals = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); config.Fields.Apply(f => { var ctx = new ResolveValueContext { Source = node }; var result = f.Resolver.Resolve(ctx); if (result is INode) { result = ApplyConfig(result as INode); } else if (result is IEnumerable && !(result is string)) { result = GetListResult(result as IEnumerable); } vals[f.Name] = result; }); return(config.PrintAst(vals)); } return(null); }
object IValueResolver.Resolve(ResolveValueContext context) { return(Resolve(context)); }
public TProperty Resolve(ResolveValueContext context) { return(_property.Compile()(context.SourceAs <TObject>())); }