如何创建与工作流设计器工具箱相同的工具箱?

时间:2014-01-29 09:50:38

标签: c# workflow workflow-activity t4-toolbox

我正在尝试构建一个与工作流设计器相同的工具箱。所有工作流活动/元素都应列在10类活动设计者中 (控制流程,流程图,状态机,消息传递,运行时,基元,事务,集合,错误处理,迁移)。

我曾尝试从汇编中加载工作流的所有活动,但是存在一些问题。

1)。活动名称未完全显示。例如,AddToCollection将显示为AddToCollection'1。如何完全展示它们?

2)。所有活动都收集在“System.Activities.Statements”类别中。因为我不知道如何根据上述类别对它们进行分组。所以我只是加载程序集'System.Activities.Statements'并添加我在锅中的所有内容。有什么想把它们分组吗?

 private static ToolboxControl CreateToolboxControl()
 {
    const string @namespace = "System.Activities.Statements";
    var toolbox = new ToolboxControl();
    var cat = new ToolboxCategory(@namespace);
    ToolboxItemWrappers(typeof(Flowchart).Assembly, @namespace).ToList().ForEach(cat.Add);
    if (cat.Tools.Count > 0)
        toolbox.Categories.Add(cat);
    return toolbox;        
  }

  private static IEnumerable<ToolboxItemWrapper> ToolboxItemWrappers(Assembly assembly, string @namespace)
  {
    if (assembly == null)
    {
      throw new ArgumentNullException("assembly");
    }
    if (string.IsNullOrEmpty(@namespace))
    {
        return Enumerable.Empty<ToolboxItemWrapper>();
    }

    var q = from type in assembly.GetTypes()
            where string.Equals(type.Namespace, @namespace)
            && type.IsPublic && !type.IsNested && !type.IsAbstract
            && type.GetConstructor(Type.EmptyTypes) != null
            orderby type.Name
            select new ToolboxItemWrapper(type);
    return q;
  }

3)。有些活动不在我的列表中。例如“消息”类别中的所有内容都不存在。我如何从装配或其他方式获得它们?

非常感谢!

伊万

0 个答案:

没有答案