/// <summary>
        /// Adds a step to the workplan
        /// </summary>
        /// <param name="workplan">The workplan.</param>
        /// <param name="task">The task to add.</param>
        /// <param name="parameter">The parameter for the task.</param>
        /// <param name="input">The input for the step</param>
        /// <param name="outputs">The outputs of the steps.</param>
        /// <returns></returns>
        public static TaskStep <TActivity, TParam> AddStep <TActivity, TParam>(this Workplan workplan, TaskStep <TActivity, TParam> task, TParam parameter, IConnector[] input, params IConnector[] outputs)
            where TActivity : Activity <TParam>, new()
            where TParam : IParameters, new()
        {
            task.Parameters = parameter;
            for (var i = 0; i < input.Length; i++)
            {
                task.Inputs[i] = input[i];
            }

            for (var i = 0; i < outputs.Length; i++)
            {
                task.Outputs[i] = outputs[i];
            }

            workplan.Add(task);

            return(task);
        }
        /// <summary>
        /// Adds a step to the workplan
        /// </summary>
        /// <param name="workplan">The workplan.</param>
        /// <param name="task">The task to add.</param>
        /// <param name="parameter">The parameter for the task.</param>
        /// <param name="input">The input for the step</param>
        /// <param name="outputs">The outputs of the steps.</param>
        /// <returns></returns>
        public static TaskStep <TActivity, TProcParam, TParam> AddStep <TActivity, TProcParam, TParam>(this Workplan workplan, TaskStep <TActivity, TProcParam, TParam> task, TParam parameter, IConnector input, params IConnector[] outputs)
            where TActivity : IActivity <TProcParam>, new()
            where TProcParam : IParameters
            where TParam : TProcParam, new()
        {
            task.Parameters = parameter;
            task.Inputs[0]  = input;

            for (var i = 0; i < outputs.Length; i++)
            {
                task.Outputs[i] = outputs[i];
            }

            if (task.Outputs.Length != outputs.Length)
            {
                throw new ArgumentException($"Wrong number of outputs for the task {task.Name}");
            }

            workplan.Add(task);

            return(task);
        }