/// <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); }
/// <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); }
/// <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); }