示例#1
0
        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();
        }
示例#2
0
        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();
        }