/// <summary>
        /// Starts the specified activity.
        /// </summary>
        /// <param name="activity">The activity.</param>
        /// <param name="workflow">The workflow.</param>
        /// <param name="timeout">The timeout.</param>
        public void Start(Activity activity, IWorkflow workflow, TimeSpan timeout)
        {
            //Guard.AgainstNull(() => activity);
            //Guard.AgainstNull(() => workflow);

            var instance = new IntellitideWorkflowInstance(activity, FrameworkEnvironment.Instance);

            using (new TransactionScope())
            {
                instance.Start(workflow);
                if (!instance.WaitOne(timeout))
                {
                    throw new TimeoutException("Timeout waiting for unload from workflow engine");
                }
            }
            workflow.WorkflowInstanceId = instance.InstanceId;
            UpdateWorkflowState(workflow, instance.Result, null);
        }
        /// <summary>
        /// Processes the specified activity.
        /// </summary>
        /// <param name="activity">The activity.</param>
        /// <param name="workflow">The workflow.</param>
        /// <param name="transition">The transition.</param>
        /// <param name="request">The request.</param>
        /// <param name="timeout">The timeout.</param>
        public void Process(Activity activity, IWorkflow workflow, WorkflowTransition transition, WorkflowRequest request, TimeSpan timeout)
        {
            //Guard.AgainstNull(() => activity);
            //Guard.AgainstNull(() => workflow);
            //Guard.AgainstNull(() => transition);
            //Guard.AgainstNull(() => request);

            var instance = new IntellitideWorkflowInstance(activity, FrameworkEnvironment.Instance.Container);

            using (new TransactionScope(TransactionScopeOption.Suppress))
            {
                instance.Process(workflow, transition, request);
                if (!instance.WaitOne(timeout))
                {
                    throw new TimeoutException("Timeout waiting for unload from workflow engine");
                }
            }
            UpdateWorkflowState(workflow, instance.Result, transition);
        }