Esempio n. 1
0
 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);
         }
     }
 }
Esempio n. 2
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;
                    }
                }
            }
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
                }
            }
        }