zoukankan      html  css  js  c++  java
  • 通过AEC解读WF的核心原理(二)通过AEC调用添加到引擎中的服务对像

     

    说明

    TrackingService,PersistenceService,ExternalDataExchange等服务都是通过引擎的AddService方法添加的

     

    可以在Activity中用ActivityExecutionContext的GetService方法得到WorkflowRuntime的AddService方法加载的外部对象

     

    本例是一个将自定义对象通过引擎的AddService方法添加,自定义Activity在内部使用演示

     

    例子下载:https://files.cnblogs.com/wxwinter/aec2.rar

    例子

    自定义功能类

    public class wxdTest

    {

    public string Text

    { set; get; }

     

    public void myTest(string v)

    {

    System.Console.WriteLine("一个外部实现:" + v);

    }

    }

     

    自定义Activity

    public class Activity1 : Activity

    {

    public string Text

    { set; get; }

     

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)

    {

    wxdTest obj = executionContext.GetService<wxdTest>();

    obj.myTest(Text);

    this.Text = obj.Text;

    return base.Execute(executionContext);

    }

    }

     

    测试用工作流

    public class Workflow1 : SequentialWorkflowActivity

    {

    private CodeActivity codeActivity1;

    private Activity1 activity11;

     

    [System.Diagnostics.DebuggerNonUserCode]

    private void InitializeComponent()

    {

    this.CanModifyActivities = true;

    this.codeActivity1 = new System.Workflow.Activities.CodeActivity();

    this.activity11 = new wxwinterAecTest.Activity1();

    //

    // codeActivity1

    //

    this.codeActivity1.Name = "codeActivity1";

    this.codeActivity1.ExecuteCode += new System.EventHandler(this.codeActivity1_ExecuteCode);

    //

    // activity11

    //

    this.activity11.Name = "activity11";

    this.activity11.Text = "wxd";

    //

    // Workflow1

    //

    this.Activities.Add(this.activity11);

    this.Activities.Add(this.codeActivity1);

    this.Name = "Workflow1";

    this.CanModifyActivities = false;

    }

     

    public Workflow1()

    {

    InitializeComponent();

    }

     

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)

    {

    System.Console.WriteLine("内部打印:" + activity11.Text);

    }

    }

     

    宿主

    class Program

    {

    static void Main()

    {

    WorkflowRuntime workflowRuntime = new WorkflowRuntime();

    wxdTest obj = new wxdTest();

    obj.Text = "lzm";

     

    workflowRuntime.AddService(obj);

     

    workflowRuntime.WorkflowCompleted +=new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);

    workflowRuntime.WorkflowTerminated +=new EventHandler<WorkflowTerminatedEventArgs>(workflowRuntime_WorkflowTerminated);

    workflowRuntime.WorkflowIdled+=new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);

    WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));

    instance.Start();

     

    System.Console.Read();

    }

     

    static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)

    {

    System.Console.WriteLine("WorkflowIdled");

    }

     

    static void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e)

    {

    System.Console.WriteLine("Terminated" + e.Exception.Message);

    }

     

    static void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)

    {

    System.Console.WriteLine("WorkflowCompleted");

    }

     

    }

     

    运行结果

     

     

    总结:

    AEC为Activity访问加载到引擎中的服务提供了接口

  • 相关阅读:
    CentOS6.4 配置mysql服务器启动多个端口,同步单表数据
    生成CSV文件后再将CSV文件导入到mysql
    Quartz Cron 表达式
    Jquery 提示插件alertify 【备用】
    tnsping 命令解析
    Gearman安装及使用
    Redis安装部署
    Linux多网卡负载均衡 : bond
    ulimit命令
    Nginx 负载均衡
  • 原文地址:https://www.cnblogs.com/foundation/p/1214785.html
Copyright © 2011-2022 走看看