private Activity LoadRootActivity(Type workflowType, bool createDefinition, bool initForRuntime) { WorkflowLoaderService loader = workflowRuntime.GetService <WorkflowLoaderService>(); Activity root = loader.CreateInstance(workflowType); if (root == null) { throw new InvalidOperationException(ExecutionStringManager.CannotCreateRootActivity); } if (root.GetType() != workflowType) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, ExecutionStringManager.WorkflowTypeMismatch, workflowType.FullName)); } if (createDefinition) { ValidateDefinition(root, true, workflowRuntime.GetService <ITypeProvider>()); } if (initForRuntime) { ((IDependencyObjectAccessor)root).InitializeDefinitionForRuntime(null); } root.SetValue(Activity.WorkflowRuntimeProperty, workflowRuntime); return(root); }
private Activity LoadRootActivity(string xomlText, string rulesText, byte[] xomlHashCode, bool createDefinition, bool initForRuntime) { Activity root = null; WorkflowLoaderService loader = workflowRuntime.GetService <WorkflowLoaderService>(); using (StringReader xomlTextReader = new StringReader(xomlText)) { using (XmlReader xomlReader = XmlReader.Create(xomlTextReader)) { XmlReader rulesReader = null; StringReader rulesTextReader = null; try { if (!string.IsNullOrEmpty(rulesText)) { rulesTextReader = new StringReader(rulesText); rulesReader = XmlReader.Create(rulesTextReader); } root = loader.CreateInstance(xomlReader, rulesReader); } finally { if (rulesReader != null) { rulesReader.Close(); } if (rulesTextReader != null) { rulesTextReader.Close(); } } } } if (root == null) { throw new InvalidOperationException(ExecutionStringManager.CannotCreateRootActivity); } if (createDefinition) { ITypeProvider typeProvider = workflowRuntime.GetService <ITypeProvider>(); ValidateDefinition(root, false, typeProvider); } if (initForRuntime) { ((IDependencyObjectAccessor)root).InitializeDefinitionForRuntime(null); } // Save the original markup. root.SetValue(Activity.WorkflowXamlMarkupProperty, xomlText); root.SetValue(Activity.WorkflowRulesMarkupProperty, rulesText); root.SetValue(WorkflowDefinitionHashCodeProperty, xomlHashCode); root.SetValue(Activity.WorkflowRuntimeProperty, workflowRuntime); return(root); }