WF - 如何在不在单独的工作流活动库中创建自定义活动的情况下使用自定义活动?

时间:2009-09-04 03:05:08

标签: .net workflow-foundation workflow-activity

我正在努力完成一些似乎应该非常简单的事情。我有一个状态机工作流程控制台应用程序,其中包含工作流程。我为它创建了一个自定义活动。此活动永远不会在任何地方使用。我只想在我的工作流程中使用此活动,但是:

  1. 它不会出现在工具箱中。
  2. 我无法将其从解决方案资源管理器拖到工作流设计器上。
  3. 我绝对不想创建单独的状态机工作流活动库,因为这会使我的解决方案变得混乱。就像我说的那样,我永远不会在任何其他项目中使用这个活动,所以我想把它限制在这个...但我无法弄清楚如何把它带到设计师身上!我疯了吗??

    以下是活动的代码:

    public partial class GameSearchActivity: Activity
    {
        public GameSearchActivity()
        {
            InitializeComponent();
        }
    
        public static DependencyProperty QueryProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Query", typeof(string), typeof(GameSearchActivity));
        [Description("Query")]
        [Category("Dependency Properties")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public string Query
        {
            get
            {
                return ((string)(base.GetValue(GameSearchActivity.QueryProperty)));
            }
            set
            {
                base.SetValue(GameSearchActivity.QueryProperty, value);
            }
        }
    
        public static DependencyProperty ResultsProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Results", typeof(string), typeof(GameSearchActivity));
        [Description("Results")]
        [Category("Dependency Properties")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public IEnumerable<Game_GamePlatform> Results
        {
            get
            {
                return ((IEnumerable<Game_GamePlatform>)(base.GetValue(GameSearchActivity.ResultsProperty)));
            }
            set
            {
                base.SetValue(GameSearchActivity.ResultsProperty, value);
            }
        }
    
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            IDataService ds = executionContext.GetService<IDataService>();
            Results = ds.SearchGames(Query);
    
            return ActivityExecutionStatus.Closed;
        }
    }
    

    感谢。


    编辑:

    好的,所以我发现如果我将项目类型从控制台应用程序更改为类库,则自定义活动将显示在工具箱中。但是,这是不可接受的。它需要是一个控制台/ Windows应用程序。

    有人知道解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

看起来您已经在Visual Studio中发现了一个错误。我确定你可以破解它使其工作,但是,你是否考虑过使用它并将工作流位保留在类库中并从简单的控制台应用程序引用它们?是的,这会创建一个EXE和一个DLL,但这样做的成本微不足道,实际上可以更好地分离您的图层(UI与业务逻辑),并在将来实现更好的重用。

答案 1 :(得分:0)

我离开了我的机器所以我无法检查这个想法,但你是否尝试进入设计人员的代码文件并手动插入最小代码,然后回到设计器中查看它是否存在?

你还没有说过你是否让设计师创建了XAML或C#,但即使它是XAML,你也应该能够编辑XML来做到这一点。

答案 2 :(得分:0)

您所要做的就是构建项目。如果它成功编译,它应该显示在工具箱中。设计者只从最后一次成功的构建中读取活动。