protected virtual bool ArgumentSuppliedForParameter(ParameterInfo parameter, ArgumentCollection arguments)
        {
            object argument;

            if (!arguments.TryGetValue(parameter.Name, out argument))
            {
                return false;
            }

            var argumentType = argument.GetType();

            if (!parameter.ParameterType.IsAssignableFrom(argumentType))
            {
                return false;
            }

            return true;
        }