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