private IOperation CreateCompensatingOperation(WorkflowConfiguration configuration) { var createMethod = typeof(Operation).GetMethod("Create", BindingFlags.Public | BindingFlags.Static); var methodWithTypeArgument = createMethod.MakeGenericMethod(_operationType); return((IOperation)methodWithTypeArgument.Invoke(null, new object[] { configuration })); }
/// <summary> /// Resolve an operation instance. It can take any of the registered dependency /// types as constructor arguments. /// </summary> /// <typeparam name="TOperation">The type of operation to create</typeparam> /// <param name="configuration">The current workflow configuration</param> /// <returns>The new, uninitialized operation</returns> public IOperation Resolve <TOperation>(WorkflowConfiguration configuration) where TOperation : IOperation { Verify.NotNull(configuration, nameof(configuration)); var actualOperation = GetActualOperation <TOperation>(); return(OperationResolverHelper.ApplyBehaviors(actualOperation, configuration)); }
/// <summary> /// Create a new initialized instance of an operation type. /// </summary> /// <typeparam name="TOperation">The type of operation to create</typeparam> /// <param name="configuration">The current workflow configuration</param> /// <returns>A new operation instance</returns> public static IOperation Create <TOperation>(WorkflowConfiguration configuration) where TOperation : IOperation { Verify.Operation(configuration != null, "Operation.Configuration was not set."); Verify.Operation(configuration.Resolver != null, "Operation.Configuration.Resolver was not set. You can set it to a SimpleOperationResolver instance or add a more full featured, external implementation."); try { var operation = configuration.Resolver.Resolve <TOperation>(configuration); operation.Initialize(configuration); return(operation); } catch (Exception e) { throw new OperationCreationException <TOperation>(e); } }
/// <summary> /// Initialize the operation. /// </summary> /// <param name="configuration">The global configuration of the workflow</param> public virtual void Initialize(WorkflowConfiguration configuration) { Verify.NotNull(configuration, nameof(configuration)); _configuration = configuration; }
/// <summary> /// Creates a new OperationBehavior instance. /// </summary> /// <param name="configuration">The configuration of the executing workflow</param> public override OperationBehavior CreateBehavior(WorkflowConfiguration configuration) { return(new CompensatingOperationBehavior(CreateCompensatingOperation(configuration), _compensatedExceptionTypes)); }
/// <summary> /// Create the retry behavior. /// </summary> /// <param name="configuration">The configuration of the executing workflow</param> /// <returns>The created behavior</returns> public override OperationBehavior CreateBehavior(WorkflowConfiguration configuration) { return(new RetryBehavior(_timesToRetry, TimeSpan.FromMilliseconds(_retryDelayInMilliSeconds), _retryExeptionTypes)); }
/// <summary> /// Creates a new OperationBehavior instance. /// </summary> /// <param name="configuration">The configuration of the executing workflow</param> public override OperationBehavior CreateBehavior(WorkflowConfiguration configuration) { return(new ContinueOnFailureBehavior()); }
/// <summary> /// Create a new atomic behavior instance. /// </summary> /// <param name="configuration">The configuration of the executing workflow</param> /// <returns>The behavior</returns> public override OperationBehavior CreateBehavior(WorkflowConfiguration configuration) { return(new AtomicBehavior()); }