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