Esempio n. 1
0
        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;
                    }
                }
            }
        }