private object DoInvokeMethod(MethodInfo method, object[] args, IMessage message) { object result = null; IMethodInvoker invoker = null; try { invoker = invokers.ContainsKey(method) ? invokers[method] : null; if (invoker == null) { invoker = new DefaultMethodInvoker(_obj, method); invokers.Add(method, invoker); } result = invoker.InvokeMethod(args); } catch (ArgumentException e) { try { if (message != null) { result = invoker.InvokeMethod(message); methodsExpectingMessage.Add(method); } } catch (Exception ex) { //TODO NoSuchMethodException e2) { throw new MessageHandlingException(message, "unable to resolve method for args: " + StringUtils.ArrayToCommaDelimitedString(args), ex); } } return(result == null || result.GetType().Equals(typeof(Missing)) ? null : result); }
public void TestIntegerArgumentWithVoidReturnAndFailedConversion() { TestBean testBean = new TestBean(); MethodInfo method = testBean.GetType().GetMethod("IntegerArgumentWithVoidReturn"); DefaultMethodInvoker invoker = new DefaultMethodInvoker(testBean, method); invoker.InvokeMethod("ABC"); }
public void TestTwoArgumentMethodWithOnlyThreeArgumentsProvided() { TestBean testBean = new TestBean(); MethodInfo method = testBean.GetType().GetMethod("StringAndIntegerArgumentMethod"); DefaultMethodInvoker invoker = new DefaultMethodInvoker(testBean, method); invoker.InvokeMethod("ABC", 123, 456); }
public void TestTwoArgumentsAndSuccessfulConversion() { TestBean testBean = new TestBean(); MethodInfo method = testBean.GetType().GetMethod("StringAndIntegerArgumentMethod"); DefaultMethodInvoker invoker = new DefaultMethodInvoker(testBean, method); object result = invoker.InvokeMethod("ABC", "789"); Assert.That(result, Is.EqualTo("ABC:789")); }
public void TestIntegerArgumentWithVoidReturnAndSuccessfulConversion() { TestBean testBean = new TestBean(); MethodInfo method = testBean.GetType().GetMethod("IntegerArgumentWithVoidReturn"); DefaultMethodInvoker invoker = new DefaultMethodInvoker(testBean, method); invoker.InvokeMethod("123"); Assert.That(testBean.lastIntegerArgument, Is.EqualTo(123)); }
public void TestStringArgumentWithVoidReturnAndNoConversionNecessary() { TestBean testBean = new TestBean(); MethodInfo method = testBean.GetType().GetMethod("StringArgumentWithVoidReturn"); DefaultMethodInvoker invoker = new DefaultMethodInvoker(testBean, method); invoker.InvokeMethod("test"); Assert.That(testBean.lastStringArgument, Is.EqualTo("test")); }
public MessageListMethodAdapter(object obj, MethodInfo method) { AssertUtils.ArgumentNotNull(obj, "'obj' must not be null"); AssertUtils.ArgumentNotNull(method, "'method' must not be null"); AssertUtils.IsTrue(method.GetParameters().Length == 1 && method.GetParameters()[0].ParameterType.Equals(typeof(IList <IMessage>)), "Method must accept exactly one parameter, and it must be a List."); _method = method; _invoker = new DefaultMethodInvoker(obj, _method); }
public MessageListMethodAdapter(object obj, string methodName) { AssertUtils.ArgumentNotNull(obj, "'obj' must not be null"); AssertUtils.ArgumentNotNull(methodName, "'methodName' must not be null"); _method = GetMethodWithListParam(obj, methodName); AssertUtils.ArgumentNotNull(_method, "Method '" + methodName + "(List<> args)' not found on '" + obj.GetType() + "'."); _invoker = new DefaultMethodInvoker(obj, _method); }
static MethodInvoker() { Invoker = new DefaultMethodInvoker(); }