public object Invoke(DispatchIdentifier id, DispatchType dispType, JsValue[] jsArgs, out Type returnType) { if (dispType.IsMethod()) { return InvokeMethod(dispType, id, jsArgs, out returnType); } if (dispType.IsPropertyPut()) { return SetProperty(id, jsArgs, out returnType); } if (dispType.IsPropertyGet()) { return GetProperty(id, out returnType); } throw new NotSupportedException(); }
public object Invoke(DispatchIdentifier id, DispatchType dispType, JsValue[] jsArgs, out Type returnType) { MemberInfo member = GetMember(id.AsString); if (member == null) { returnType = typeof(void); return null; } Debug.WriteLine(string.Format("{0}, {1}.{2}", dispType, this.target, member.Name)); if (member is MethodInfo && dispType == DispatchType.PropertyGet) { var method = (MethodInfo)member; return GetMethodAsProperty((MethodInfo)member, this.target, out returnType); } var args = this.bridge.UnwrapParameters(jsArgs, dispType, member); if (dispType.IsMethod()) { var method = (MethodBase)member; returnType = method.IsConstructor ? method.DeclaringType : ((MethodInfo)method).ReturnType; return method.Invoke(this.target, args); } if (dispType.IsPropertyGet()) { var pi = (PropertyInfo)member; returnType = pi.PropertyType; return pi.GetValue(this.target, null); } if (dispType.IsPropertyPut()) { var pi = (PropertyInfo)member; pi.SetValue(this.target, args.First(), null); returnType = typeof(void); return null; } throw new NotSupportedException(); }