protected override void Execute(object parameter) { if (ActionMethod != null && ActionTargetReference.IsAlive) { ActionMethod.Invoke(ActionTargetReference.Target, new object[] { (T)parameter }); } }
public async Task Should_call_action(ActionMethod actionMethod) { var requestGraph = RequestGraph .CreateFor(actionMethod) .AddDefaultResponseStatus(); var routeDescriptor = requestGraph.GetRouteDescriptor(); requestGraph.AddResponseWriter1(c => c.Response.ToString().CreateTextResponse().ToTaskResult()); requestGraph.AddRequestBinder1(c => SetArguments(requestGraph.ActionMethod, c, (a, p) => a[p.Position] = $"value{p.Position}")); requestGraph.AddRequestBinder2(c => SetArguments(requestGraph.ActionMethod, c, (a, p) => a[p.Position] += $"-{p.Position}")); var invoker = CreateInvoker(requestGraph); var handler = Substitute.For <IHandler>(); handler.Response().ReturnsForAnyArgs(x => "response"); handler.ResponseAsync().ReturnsForAnyArgs(x => "response".ToTaskResult()); handler.ParamsAndResponse(null).ReturnsForAnyArgs(x => "response"); handler.ParamsAndResponseAsync(null).ReturnsForAnyArgs(x => "response".ToTaskResult()); var response = await invoker.Invoke(handler); var expectedArguments = actionMethod.MethodDescriptor.Parameters.Select(p => $"value{p.Position}-{p.Position}").Cast <object>().ToArray(); await actionMethod.Invoke(handler.Received(1), expectedArguments); if (routeDescriptor.HasResponse) { response.StatusCode.ShouldEqual(HttpStatusCode.OK); var responseText = await response.Content.ReadAsStringAsync(); responseText.ShouldEqual("response"); } else { response.StatusCode.ShouldEqual(requestGraph .Configuration.DefaultNoResponseStatusCode); } }