我正在使用prism构建WPF应用程序,我想使用工作流基础(本地和服务)。
是否有人能够深入了解使用EventAggretator调用的工作流活动,然后让工作流发布事件作为响应?我正在考虑构建一个允许活动发布一个到多个事件的实现,这是一个很好的工作流场景吗?
答案 0 :(得分:2)
使用事件聚合器实现的一种方法是将其作为工作流活动的扩展,如下所示。在 WorkflowApplication / WorkflowInvoker 中,您可以注册事件聚合器的实例,以便您的活动可以引发事件。我还没有在我的应用程序中使用事件聚合器,所以可能会有一些怪癖。
需要事件聚合器并在其Execute方法中使用它的自定义活动:
namespace SampleWorkflowAppOne
{
using System.Activities;
using Microsoft.Practices.Prism.Events;
public class PurchaseOrderInventoryCheckActivity : NativeActivity
{
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.RequireExtension<IEventAggregator>();
}
protected override void Execute(NativeActivityContext context)
{
var eventAggregator = context.GetExtension<IEventAggregator>();
var somethingHappenedEvent = eventAggregator.GetEvent<MyActivityEvent>();
var myEventInfo = new MyEventInfo() { SomeNumber = 5 };
somethingHappenedEvent.Publish(myEventInfo);
}
}
public class MyActivityEvent : CompositePresentationEvent<MyEventInfo>
{
}
public class MyEventInfo
{
public int SomeNumber { get; set; }
}
}
注册事件聚合器实例以用于您的活动:
using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
namespace SampleWorkflowAppOne
{
using Microsoft.Practices.Prism.Events;
class Program
{
static void Main(string[] args)
{
var purchaseOrderValidationWorkflow = new PurchaseOrderValidationWorkflow();
var eventAggregator = new EventAggregator();
var wfInvoker = new WorkflowInvoker(purchaseOrderValidationWorkflow);
wfInvoker.Extensions.Add(eventAggregator);
wfInvoker.Invoke();
}
}
}
希望有所帮助。
编辑:我发现这个视频显示了构建一个事件驱动+长时间运行的工作流程,这也可能有所帮助。我还没有看过它:http://channel9.msdn.com/Events/Build/BUILD2011/TOOL-801T