Публикация событий из рабочего процесса - PullRequest
3 голосов
/ 07 января 2012

Я создаю приложение WPF с использованием призмы и хотел бы использовать основу рабочего процесса (как локально, так и из службы).

Есть ли у кого-нибудь понимание создания рабочих процессов, вызываемых с помощью EventAggretator, и затем рабочий процесс публикует события в ответ? Я рассматриваю возможность создания реализации, которая позволила бы деятельности публиковать одно или много событий. Является ли это хорошим сценарием для рабочего процесса?

1 Ответ

2 голосов
/ 09 октября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...