Пример #1
0
        private WorkflowApplication CreateWorkflowApplication(IWorkflow workflow)
        {
            WorkflowApplication ret = null;

            if (workflow != null)
            {
                ret = new WorkflowApplication(Activity, workflow.GetInputs())
                {
                    InstanceStore          = InstanceStore.Value,
                    PersistableIdle        = (e) => PersistableIdleAction.Unload,
                    SynchronizationContext = SynchronizationContext,
                    Unloaded             = OnUnload,
                    Idle                 = OnIdle,
                    Aborted              = OnAbort,
                    Completed            = OnComplete,
                    OnUnhandledException = OnException,
                };
            }
            else
            {
                ret = new WorkflowApplication(Activity)
                {
                    InstanceStore          = InstanceStore.Value,
                    PersistableIdle        = (e) => PersistableIdleAction.Unload,
                    SynchronizationContext = SynchronizationContext,
                    Unloaded             = OnUnload,
                    Idle                 = OnIdle,
                    Aborted              = OnAbort,
                    Completed            = OnComplete,
                    OnUnhandledException = OnException,
                };
            }

            // Add the WorkflowHostType value to workflow application so that it stores this data in the instance store when persisted
            ret.AddInitialInstanceValues(new Dictionary <XName, object>
            {
                { WorkflowHostTypePropertyName, HostTypeName }
            });
            ret.Extensions.Add(new WorkflowStateTracker(stateRecord =>
            {
                lock (Result)
                {
                    Result.NewState = new WorkflowState(stateRecord.StateName)
                    {
                        Context = Result.Context
                    };
                    Result.Context = null;
                }
            }));
            ret.Extensions.Add(Result);
            foreach (var extension in Extensions)
            {
                ret.Extensions.Add(extension);
            }
            return(ret);
        }