/// <summary>
        /// Creates a transaction.
        /// </summary>
        /// <typeparam name="TStepId">The type of the step id.</typeparam>
        /// <typeparam name="TData">The type of the transaction data.</typeparam>
        /// <param name="options">The action to set options.</param>
        /// <returns>The transaction.</returns>
        public ITransaction <TStepId, TData> Create <TStepId, TData>(Action <ICreateTransactionContext <TStepId, TData> > options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            ICreateTransactionContext <TStepId, TData> context = new CreateTransactionContext <TStepId, TData>();

            options(context);
            ILogger logger = this.CreateLogger <TStepId, TData>(context);
            ITransactionCreateInfo <TStepId>   info        = this.CreateTransactionInfo <TStepId, TData>(context);
            CreatePartContext <TStepId, TData> partContext = new CreatePartContext <TStepId, TData>()
            {
                Context = context,
                Logger  = logger,
                Info    = info
            };
            ITransactionDefinition <TStepId, TData> definition   = this.CreateDefinition <TStepId, TData>(partContext);
            ITransactionStorage <TData>             stateStorage = this.CreateStateStorage <TStepId, TData>(partContext);

            TransactionContext <TStepId, TData> transactionContext = new TransactionContext <TStepId, TData>()
            {
                Logger         = logger,
                Info           = info,
                Definition     = definition,
                SessionStorage = stateStorage
            };

            return(new Transaction <TStepId, TData>(transactionContext));
        }
Exemple #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TransactionDefinition<TStepId, TData>"/> class.
 /// </summary>
 /// <param name="info">The info.</param>
 public TransactionDefinition(ITransactionCreateInfo <TStepId> info)
 {
     this.info = info;
 }