首页 > 编程开发 > Objective-C编程 >
-
通过AEC解读WF的核心原理(2)通过AEC调用添加到引擎中的服务对象
说明
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);
}
}
测试用工作流
编缉推荐阅读以下文章
- 通过AEC解读WF的核心原理(十三完)实现Visio设计风格的Activity
- 通过AEC解读WF的核心原理(十二)WorkflowQueue的提前提交
- 通过AEC解读WF的核心原理(十一)WF与Windows操作系统的对比
- 通过AEC解读WF的核心原理(十)取消与取消处理器
- 通过AEC解读WF的核心原理(九)实现IEventActivity
- 通过AEC解读WF的核心原理(八)实现Switch功能的Activity
- 通过AEC解读WF的核心原理(七)一个实现Goto功能的Activity
- 通过AEC解读WF的核心原理(六)创建复本ForEach循环
- 通过AEC解读WF的核心原理(五)实现一个从下向上执行的顺序容器
- 通过AEC解读WF的核心原理(四)AEC在内部执行childActivity
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访问加载到引擎中的服务提供了接口
编缉推荐阅读以下文章
- 通过AEC解读WF的核心原理(十三完)实现Visio设计风格的Activity
- 通过AEC解读WF的核心原理(十二)WorkflowQueue的提前提交
- 通过AEC解读WF的核心原理(十一)WF与Windows操作系统的对比
- 通过AEC解读WF的核心原理(十)取消与取消处理器
- 通过AEC解读WF的核心原理(九)实现IEventActivity
- 通过AEC解读WF的核心原理(八)实现Switch功能的Activity
- 通过AEC解读WF的核心原理(七)一个实现Goto功能的Activity
- 通过AEC解读WF的核心原理(六)创建复本ForEach循环
- 通过AEC解读WF的核心原理(五)实现一个从下向上执行的顺序容器
- 通过AEC解读WF的核心原理(四)AEC在内部执行childActivity
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访问加载到引擎中的服务提供了接口