通过AEC解读WF的核心原理(二)通过AEC调用添加到引擎中的服务对像

本文介绍如何通过ActivityExecutionContext的GetService方法访问由WorkflowRuntime加载的服务。示例展示了自定义对象如何通过AddService方法添加,并在自定义Activity中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

说明

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

 

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

 

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

 

例子下载:http://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访问加载到引擎中的服务提供了接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值