Example #1
0
        private async Task <StepResult> ExecuteStep(StepParameters lastParameters, Type operationToExec)
        {
            if (!_steps.ContainsKey(operationToExec))
            {
                throw new Exception($"Операция {operationToExec} не зарегистрированна");
            }

            var step = _steps[operationToExec];

            StepParameters newParameters;

            var stepParametersType = step.GetParametersType();
            var lastParametersType = lastParameters.GetType();

            if (lastParametersType == stepParametersType)
            {
                newParameters = lastParameters;
            }
            else
            {
                newParameters = (StepParameters)_mapper.Map(lastParameters, lastParametersType, stepParametersType);
            }

            var methodInfo = step.GetType().GetMethod("Execute");

            var methodResult = (Task <StepResult>)methodInfo.Invoke(step, new [] { newParameters });
            var result       = await methodResult;

            result.LastParameters = newParameters;

            return(result);
        }