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);
        }