internal void Initialize() { if ((this.extensionManager != null) && this.extensionManager.HasSingletonIWorkflowInstanceExtensions) { this.SetInstance(this.extensionManager.SingletonExtensions); if (this.extensionManager.HasAdditionalSingletonIWorkflowInstanceExtensions) { this.SetInstance(this.extensionManager.AdditionalSingletonExtensions); } } if (this.shouldSetInstanceForInstanceExtensions) { for (int i = 0; i < this.instanceExtensions.Count; i++) { KeyValuePair <WorkflowInstanceExtensionProvider, object> pair = this.instanceExtensions[i]; IWorkflowInstanceExtension item = pair.Value as IWorkflowInstanceExtension; if (item != null) { if (this.workflowInstanceExtensions == null) { this.workflowInstanceExtensions = new List <IWorkflowInstanceExtension>(); } this.workflowInstanceExtensions.Add(item); } } if (this.additionalInstanceExtensions != null) { this.SetInstance(this.additionalInstanceExtensions); } } }
internal static void AddExtensionClosure(object newExtension, ref List <object> targetCollection, ref bool addedTrackingParticipant, ref bool addedPersistenceModule) { // see if we need to process "additional" extensions IWorkflowInstanceExtension currentInstanceExtension = newExtension as IWorkflowInstanceExtension; if (currentInstanceExtension == null) { return; // bail early } Queue <IWorkflowInstanceExtension> additionalInstanceExtensions = null; if (targetCollection == null) { targetCollection = new List <object>(); } while (currentInstanceExtension != null) { IEnumerable <object> additionalExtensions = currentInstanceExtension.GetAdditionalExtensions(); if (additionalExtensions != null) { foreach (object additionalExtension in additionalExtensions) { targetCollection.Add(additionalExtension); if (additionalExtension is IWorkflowInstanceExtension) { if (additionalInstanceExtensions == null) { additionalInstanceExtensions = new Queue <IWorkflowInstanceExtension>(); } additionalInstanceExtensions.Enqueue((IWorkflowInstanceExtension)additionalExtension); } if (!addedTrackingParticipant && additionalExtension is TrackingParticipant) { addedTrackingParticipant = true; } if (!addedPersistenceModule && additionalExtension is IPersistencePipelineModule) { addedPersistenceModule = true; } } } if (additionalInstanceExtensions != null && additionalInstanceExtensions.Count > 0) { currentInstanceExtension = additionalInstanceExtensions.Dequeue(); } else { currentInstanceExtension = null; } } }
internal static void AddExtensionClosure(object newExtension, ref List <object> targetCollection, ref bool addedTrackingParticipant, ref bool addedPersistenceModule) { IWorkflowInstanceExtension extension = newExtension as IWorkflowInstanceExtension; if (extension != null) { Queue <IWorkflowInstanceExtension> queue = null; if (targetCollection == null) { targetCollection = new List <object>(); } while (extension != null) { IEnumerable <object> additionalExtensions = extension.GetAdditionalExtensions(); if (additionalExtensions != null) { foreach (object obj2 in additionalExtensions) { targetCollection.Add(obj2); if (obj2 is IWorkflowInstanceExtension) { if (queue == null) { queue = new Queue <IWorkflowInstanceExtension>(); } queue.Enqueue((IWorkflowInstanceExtension)obj2); } if (!addedTrackingParticipant && (obj2 is TrackingParticipant)) { addedTrackingParticipant = true; } if (!addedPersistenceModule && (obj2 is IPersistencePipelineModule)) { addedPersistenceModule = true; } } } if ((queue != null) && (queue.Count > 0)) { extension = queue.Dequeue(); } else { extension = null; } } } }
void InitializeCore(IDictionary <string, object> workflowArgumentValues, IList <Handle> workflowExecutionProperties) { Fx.Assert(this.WorkflowDefinition.IsRuntimeReady, "EnsureDefinitionReady should have been called"); Fx.Assert(this.executor != null, "at this point, we better have an executor"); // Do Argument validation for root activities WorkflowDefinition.HasBeenAssociatedWithAnInstance = true; if (workflowArgumentValues != null) { IDictionary <string, object> actualInputs = workflowArgumentValues; if (object.ReferenceEquals(actualInputs, ActivityUtilities.EmptyParameters)) { actualInputs = null; } if (this.WorkflowDefinition.RuntimeArguments.Count > 0 || (actualInputs != null && actualInputs.Count > 0)) { ActivityValidationServices.ValidateRootInputs(this.WorkflowDefinition, actualInputs); } this.executor.ScheduleRootActivity(this.WorkflowDefinition, actualInputs, workflowExecutionProperties); } else { this.executor.OnDeserialized(this.WorkflowDefinition, this); } this.executor.Open(this.SynchronizationContext); this.controller = new WorkflowInstanceControl(this, this.executor); this.isInitialized = true; if (this.extensions != null && this.extensions.HasWorkflowInstanceExtensions) { WorkflowInstanceProxy proxy = new WorkflowInstanceProxy(this); for (int i = 0; i < this.extensions.WorkflowInstanceExtensions.Count; i++) { IWorkflowInstanceExtension extension = this.extensions.WorkflowInstanceExtensions[i]; extension.SetInstance(proxy); } } }
internal void Initialize() { if (_extensionManager != null) { // if we have any singleton IWorkflowInstanceExtensions, initialize them first // All validation logic for singletons is done through WorkflowInstanceExtensionManager if (_extensionManager.HasSingletonIWorkflowInstanceExtensions) { SetInstance(_extensionManager.SingletonExtensions); if (_extensionManager.HasAdditionalSingletonIWorkflowInstanceExtensions) { SetInstance(_extensionManager.AdditionalSingletonExtensions); } } } if (_shouldSetInstanceForInstanceExtensions) { for (int i = 0; i < _instanceExtensions.Count; i++) { KeyValuePair <WorkflowInstanceExtensionProvider, object> keyedExtension = _instanceExtensions[i]; // for IWorkflowInstance we key off the type of the value, not the declared type IWorkflowInstanceExtension workflowInstanceExtension = keyedExtension.Value as IWorkflowInstanceExtension; if (workflowInstanceExtension != null) { if (_workflowInstanceExtensions == null) { _workflowInstanceExtensions = new List <IWorkflowInstanceExtension>(); } _workflowInstanceExtensions.Add(workflowInstanceExtension); } } if (_additionalInstanceExtensions != null) { SetInstance(_additionalInstanceExtensions); } } }