Example #1
0
        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));
        }
Example #2
0
        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));
        }