private static object ResolveValue(BindingContext context, object instance, ChainSegment chainSegment) { object resolvedValue; if (chainSegment.IsVariable) { return(context.TryGetContextVariable(chainSegment, out resolvedValue) ? resolvedValue : chainSegment.GetUndefinedBindingResult(context.Configuration)); } if (chainSegment.IsThis) { return(instance); } if (context.TryGetVariable(chainSegment, out resolvedValue) || TryAccessMember(instance, chainSegment, context.Configuration, out resolvedValue)) { return(resolvedValue); } if (chainSegment.IsValue && context.TryGetContextVariable(chainSegment, out resolvedValue)) { return(resolvedValue); } return(chainSegment.GetUndefinedBindingResult(context.Configuration)); }
public static bool TryAccessMember(object instance, ChainSegment chainSegment, ICompiledHandlebarsConfiguration configuration, out object value) { if (instance == null) { value = chainSegment.GetUndefinedBindingResult(configuration); return(false); } chainSegment = ResolveMemberName(instance, chainSegment, configuration); value = null; return(ObjectDescriptor.TryCreate(instance, configuration, out var descriptor) && descriptor.MemberAccessor.TryGetValue(instance, chainSegment, out value)); }