示例#1
0
        /// <summary>
        /// Gets the member accessor for the specified object if not already cached. This method can have an override.
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        protected virtual IObjectAccessor GetMemberAccessorImpl(object target)
        {
            var             type = target.GetType();
            IObjectAccessor accessor;

            if (target is IScriptObject)
            {
                accessor = ScriptObjectAccessor.Default;
            }
            else if (target is string)
            {
                accessor = StringAccessor.Default;
            }
            else if (type.IsPrimitiveOrDecimal())
            {
                accessor = PrimitiveAccessor.Default;
            }
            else if (DictionaryAccessor.TryGet(target, out accessor))
            {
            }
            else if (type.IsArray)
            {
                accessor = ArrayAccessor.Default;
            }
            else if (target is IList)
            {
                accessor = ListAccessor.Default;
            }
            else
            {
                accessor = new TypedObjectAccessor(type, MemberFilter, MemberRenamer);
            }
            return(accessor);
        }
示例#2
0
        /// <summary>
        /// Gets the member accessor for the specified object if not already cached. This method can have an override.
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        protected virtual IObjectAccessor GetMemberAccessorImpl(object target)
        {
            Type            type = target.GetType();
            IObjectAccessor accessor;

            if (target is IScriptObject)
            {
                accessor = ScriptObjectAccessor.Default;
            }
            else if (DictionaryAccessor.TryGet(type, out accessor))
            {
                // do nothing
            }
            else if (type.GetTypeInfo().IsArray)
            {
                accessor = ArrayAccessor.Default;
            }
            else if (target is IList)
            {
                accessor = ListAccessor.Default;
            }
            else
            {
                accessor = new TypedObjectAccessor(type, MemberFilter, MemberRenamer);
            }

            return(accessor);
        }
示例#3
0
        /// <summary>
        /// Gets the member accessor for the specified object if not already cached. This method can have an override.
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        protected virtual IObjectAccessor GetMemberAccessorImpl(object target)
        {
            var             type = target.GetType();
            IObjectAccessor accessor;

            if (target is IScriptObject)
            {
                accessor = ScriptObjectAccessor.Default;
            }
            else if (!DictionaryAccessor.TryGet(type, out accessor))
            {
                accessor = new TypedObjectAccessor(type, MemberRenamer);
            }
            return(accessor);
        }