c# - 从工作流事件发布事件

标签 c# .net prism workflow-foundation workflow-foundation-4

我正在使用 Prism 构建 WPF 应用程序,我想使用工作流基础(本地和服务)。

是否有人了解构建使用 EventAggretator 调用的工作流事件,然后让工作流发布事件作为响应?我正在考虑构建一个允许事件发布一对多事件的实现,这是否适合工作流?

最佳答案

您可以使用事件聚合器实现的一种方法是要求它作为您的工作流事件的扩展,如下所示。然后,在您的 WorkflowApplication/WorkflowInvoker 中,您可以注册事件聚合器的实例,以便您的事件可以引发事件。我还没有在我的应用程序中使用事件聚合器(还),所以可能会有一些怪癖。

Custom Activity 需要事件聚合器并在其 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

关于c# - 从工作流事件发布事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766389/

相关文章:

c# - 为什么 View 在 Prism 复合 wpf 应用程序中第一次加载非常慢

c# - 将参数从ConfirmNavigationRequest传递到Prism中的NavigationService

c# - 通过服务器端 asp.net 代码将对象传递给 silverlight

c# - VB6 中的二进制序列化?

inversion-of-control - Unity 是否可以直接创建类而不需要注册任何东西?

c# - 同一存储的依赖注入(inject)多个接口(interface)(具有不同的connectionString)

c# - 为我的项目升级 ASP.NET 或 .NET Framework 需要等待多长时间?

C# - 将隐式类型转换为 ObservableCollection

c# - SendKeys Ctrl + C 到外部应用程序(文本到剪贴板)

c# - 使用自定义流 (IEnumerable<T>)