public object[] Bind <TMsg>(TMsg message, Delegate messageInitializer) { ParameterInfo[] destinationArguments = messageInitializer.Method.GetParameters(); if (destinationArguments.Length == 0) { return new object[] {} } ; var argumentValues = new List <object> { message }; if (destinationArguments[0].ParameterType != typeof(TMsg)) { throw new InvalidOperationException("The first parameter of the delegate must be the message to initialize"); } if (destinationArguments.Length > 1) { int requestOffset = 1; if (destinationArguments[1].ParameterType == typeof(object) && destinationArguments[1].Name == "body") { requestOffset++; argumentValues.Add(_request.NegotiateAndDeserializeMethodBody()); } var mapper = new MapRequestToDelegateHeuristic(_routeOwningUrl.Route, messageInitializer, requestOffset); argumentValues.AddRange(mapper.Map(_request.Request)); } return(argumentValues.ToArray()); } }
public object Produce(HttpListenerRequest request) { return(_returnValueProducer.DynamicInvoke(_mapper.Map(request).ToArray())); }