Exemplo n.º 1
0
        private void ConfigureAllExtensions()
        {
            // declaring instance store
            this.workflowApplication.InstanceStore = _stores.CreateInstanceStore();

            var IOParticipant = _stores.CreatePersistenceIOParticipant();
            if (IOParticipant != null)
                this.workflowApplication.Extensions.Add(IOParticipant);

            // adding the tracking participants
            this.workflowApplication.Extensions.Add(this.GetTrackingParticipant());

            // adding the custom extensions
            IEnumerable<object> extensions = this.Runtime.Configuration.CreateWorkflowExtensions();
            if (extensions != null)
            {
                foreach (object extension in extensions)
                {
                    this.workflowApplication.Extensions.Add(extension);
                }
            }

            // adding the custom extension creation functions
            IEnumerable<Func<object>> extensionFunctions = this.Runtime.Configuration.CreateWorkflowExtensionCreationFunctions<object>();
            if (extensionFunctions != null)
            {
                foreach(Func<object> extensionFunc in extensionFunctions)
                {
                    this.workflowApplication.Extensions.Add<object>(extensionFunc);
                }
            }
            
            _paramDefaults = new HostParameterDefaults();

            if (this.PSWorkflowContext.PSWorkflowCommonParameters != null)
            {
                foreach (KeyValuePair<string, object> param in this.PSWorkflowContext.PSWorkflowCommonParameters)
                {
                    if (param.Key != Constants.PSRunningTime && param.Key != Constants.PSElapsedTime)
                    {
                        _paramDefaults.Parameters.Add(param.Key, param.Value);
                    }
                }
            }

            if (this.PSWorkflowContext.PrivateMetadata != null)
            {
                _paramDefaults.Parameters[Constants.PrivateMetadata] = this.PSWorkflowContext.PrivateMetadata;
            }

            // Job related parameters
            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataName))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataName)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataName];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataInstanceId))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataInstanceId)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataInstanceId];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataSessionId))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataSessionId)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataSessionId];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataCommand))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataCommand)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataCommand];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataParentName))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataParentName)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataParentName];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataParentInstanceId))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataParentInstanceId)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataParentInstanceId];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataParentSessionId))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataParentSessionId)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataParentSessionId];
            }

            if (this.PSWorkflowContext.JobMetadata.ContainsKey(Constants.JobMetadataParentCommand))
            {
                _paramDefaults.Parameters[TranslateMetaDataName(Constants.JobMetadataParentCommand)] = 
                    this.PSWorkflowContext.JobMetadata[Constants.JobMetadataParentCommand];
            }

            _paramDefaults.Parameters["WorkflowInstanceId"] = this.InstanceId;
          
            _paramDefaults.Parameters["Input"] = this.Streams.InputStream;
            _paramDefaults.Parameters["Result"] = this.Streams.OutputStream;
            _paramDefaults.Parameters["PSError"] = this.Streams.ErrorStream;
            _paramDefaults.Parameters["PSWarning"] = this.Streams.WarningStream;
            _paramDefaults.Parameters["PSProgress"] = this.Streams.ProgressStream;
            _paramDefaults.Parameters["PSVerbose"] = this.Streams.VerboseStream;
            _paramDefaults.Parameters["PSDebug"] = this.Streams.DebugStream;
            _paramDefaults.Parameters["PSInformation"] = this.Streams.InformationStream;

            // Assign PSActivityHost here
            _paramDefaults.Runtime = Runtime;

            _paramDefaults.JobInstanceId = _job.InstanceId;

            // Assign PSHostPersistDelegate here
            Func<bool> hostDelegate = this.CheckForPersistenceAfterPSActivity;
            _paramDefaults.HostPersistenceDelegate = hostDelegate;

            Action<object> activateDelegate = this.ReactivateWorkflow;
            _paramDefaults.ActivateDelegate = activateDelegate;

            _paramDefaults.AsyncExecutionCollection = this.asyncExecutionCollection;
            _paramDefaults.RemoteActivityState = this.RemoteActivityState;

            System.Activities.Hosting.SymbolResolver resolver = new System.Activities.Hosting.SymbolResolver();
            resolver.Add("ParameterDefaults", _paramDefaults);

            this.workflowApplication.Extensions.Add(resolver);
            this.workflowApplication.Extensions.Add(_paramDefaults);
        }
 public SymbolResolverLocationReferenceEnvironment(SymbolResolver symbolResolver)
 {
     this.symbolResolver = symbolResolver;
 }