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