public override void OnExecutionPlay(WxeContext context, IWxeFunctionExecutionListener listener)
        {
            ArgumentUtility.CheckNotNull("context", context);
            ArgumentUtility.CheckNotNull("listener", listener);

            if (_scope != null)
            {
                throw new InvalidOperationException(
                          "OnExecutionPlay may not be invoked twice without calling OnExecutionStop, OnExecutionPause, or OnExecutionFail in-between.");
            }

            ExecuteAndWrapInnerException(EnterScope, null);

            _child.OnExecutionPlay(context, listener);
        }
        public override sealed TransactionStrategyBase CreateChildTransactionStrategy(bool autoCommit, IWxeFunctionExecutionContext executionContext, WxeContext wxeContext)
        {
            ArgumentUtility.CheckNotNull("executionContext", executionContext);
            ArgumentUtility.CheckNotNull("wxeContext", wxeContext);

            if (!_child.IsNull)
            {
                throw new InvalidOperationException(
                          "The transaction strategy already has an active child transaction strategy. "
                          + "This child transaction strategy must first be unregistered before invoking CreateChildTransactionStrategy again.");
            }

            var childTransactionStrategy = new ChildTransactionStrategy(autoCommit, this, Transaction, executionContext);

            _child = childTransactionStrategy;
            if (_scope != null)
            {
                _child.OnExecutionPlay(wxeContext, NullExecutionListener.Null);
            }

            return(childTransactionStrategy);
        }