public bool Handle(ActionListenerContext context) { var comparer = new TypeIsOfBaseComparer(); IEnumerable <MethodDescriptor> filtered = GetDescriptors() .Where(x => x.Name == context.CallInfo.MethodName && x.ParameterTypes.SequenceEqual(context.CallInfo.UnnamedArguments.ToTypes(), comparer)) .ToList(); var returnType = context.CallInfo.ReturnType; if (returnType != null) { var funcDescriptor = filtered.OfType <FuncDescriptor>().Where(f => f.ReturnType == returnType).FirstOrDefault(); if (funcDescriptor == null) { throw new MissingMethodException("Method not found"); } var instance = GetInstanceFromMethodDescriptor(funcDescriptor); context.Result = funcDescriptor.Func(instance, context.CallInfo.UnnamedArguments.ToArray()); } else { var actionDescriptor = filtered.OfType <ActionDescriptor>().FirstOrDefault(); if (actionDescriptor == null) { throw new MissingMethodException("Method not found"); } var instance = GetInstanceFromMethodDescriptor(actionDescriptor); actionDescriptor.Action(instance, context.CallInfo.UnnamedArguments.ToArray()); } return(true); }
public object ExecuteListeners(ActionCallInfo callInfo) { object[] actionListeners = _resolvingService.ResolveAll(typeof(IActionListener)); IEnumerable <IActionListener> handlers = actionListeners.Cast <IActionListener>().Where(h => h.CanHandle(callInfo)); var context = new ActionListenerContext(callInfo); bool wasHandled = handlers.Any(actionListener => actionListener.Handle(context)); if (!wasHandled) { throw new InvalidOperationException("No handler for call"); } return(context.Result); }
public bool Handle(ActionListenerContext context) { var unnamed = context.CallInfo.UnnamedArguments; for (int i = 0; i < unnamed.Count; i++) { var val = unnamed[i] as string; if (val != null) { unnamed[i] = val.Trim(); } } return(false); }
public bool Handle(ActionListenerContext context) { var arg = context.CallInfo.NamedArguments.FirstOrDefault(x => x.Item1.Equals("log", StringComparison.OrdinalIgnoreCase)); if (arg == null || !(arg.Item2 is bool) || !(bool)arg.Item2) { return(false); } var unnamed = context.CallInfo.UnnamedArguments; Console.Write("Calling {0}({1}) with Args: ", context.CallInfo.MethodName, context.CallInfo.ReturnType); for (int i = 0; i < unnamed.Count; i++) { var val = unnamed[i]; Console.Write("input{0}: {1} ", i, val); } Console.WriteLine(); return(false); }