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));
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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));
 }
Esempio n. 6
0
 /// <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));
 }
Esempio n. 7
0
 /// <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());
 }
Esempio n. 8
0
 /// <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());
 }