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