programloader.cs

来自「WF本质论一书的源码,要书籍的朋友同我联系.」· CS 代码 · 共 37 行

CS
37
字号
using System;
using System.Workflow.Runtime.Hosting;
using System.Xml;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.Activities.Rules;
using System.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using System.ComponentModel.Design.Serialization;
namespace EssentialWF.Services {

  public class StandardProgramLoaderService : WorkflowLoaderService {
    protected override Activity CreateInstance( Type workflowType) {
      return (Activity)Activator.CreateInstance(workflowType);
    }

    protected override Activity CreateInstance(
        XmlReader workflowDefinitionReader, XmlReader rulesReader) {

      Activity root = null;
      ITypeProvider typeProvider = this.Runtime.GetService<ITypeProvider>();
      ServiceContainer serviceContainer = new ServiceContainer();
      serviceContainer.AddService(typeof(ITypeProvider), typeProvider);

      DesignerSerializationManager manager = new DesignerSerializationManager(serviceContainer);
      using (manager.CreateSession()) {
        WorkflowMarkupSerializationManager xomlSerializationManager = new WorkflowMarkupSerializationManager(manager);
        root = new WorkflowMarkupSerializer().Deserialize(xomlSerializationManager, workflowDefinitionReader) as Activity;
        if (root != null && rulesReader != null) {
          object rules = new WorkflowMarkupSerializer().Deserialize(xomlSerializationManager, rulesReader);
          root.SetValue(RuleDefinitions.RuleDefinitionsProperty, rules);
        }
      }
      return root;
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?