private static List <object> PrepareParameters(ProcessingElement current, UnitContext octx, TransferingContext tctx) { List <object> parameters = new List <object>(); if (current.Method != null) { // TODO memoize me // TODO inject headers foreach (var parameterInfo in current.Method.GetParameters()) { if (parameterInfo.ParameterType.IsAssignableFrom(octx.GetUnitType())) { parameters.Add(octx.Unit); } else if (parameterInfo.ParameterType == typeof(TransferingContext)) { parameters.Add(tctx); } else if (parameterInfo.ParameterType == typeof(UnitContext)) { parameters.Add(octx); } else { throw new ParameterTypeMissmatchException(current.Carrier, current.Method.Name, octx.GetUnitType(), parameterInfo.ParameterType); } } } return(parameters); }