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