Один из способов реализовать агрегатор событий - это потребовать его в качестве расширения действий рабочего процесса, как показано ниже.В вашем 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