c# - Windows 工作流中的拦截/装饰事件

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

Windows Workflow Foundation 是否提供了一种方法来拦截或修饰用于日志记录等目的的事件?例如,在不修改所有现有项目代码的情况下,为每个事件进入点和退出点(最好包括事件名称)创建日志。

例如,我有一个工作流程,其中包含一个打印“Hello world”的事件。在不修改 XAML 文件的情况下,我想捕获事件的进入和退出。我想在进入事件之前打印“Entering Hello World Activity”,在事件打印“Hello World”之后,我想打印“Completed Hello World Activity”。

Windows Workflow 是否提供 Hook 事件进入和退出的机制?


@Richard210363 已经在评论中添加了 Windows Workflow Foundation 支持的功能 - 请选择关闭此问题的用户考虑改变他们的决定,因为这个问题显然有一个使用相关框架的非常具体的答案?

最佳答案

查看工作流 TrackingParticipant 类。

它作用于工作流中的所有 Activity,作用范围类似于 AOP。

它发出有关事件进入和退出的信息。

创建一个继承自 TrackingParticipant 的类并重写 Track 方法:

protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
        string CurrentActivityName = activityStateRecord.Activity.Name,
    }

然后在运行之前将您的跟踪类附加到工作流。

_workflowApplication.Extensions.Add(_yourWorkFlowTrackingClass);
_workflowApplication.Run();

您还可以将 TrackingRecord 转换为 WorkflowInstanceRecord。在它们之间,ActivityStateRecord 和 WorkflowInstanceRecord 提供了大量关于工作流及其事件的信息。

关于c# - Windows 工作流中的拦截/装饰事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528572/

相关文章:

c# - 依赖注入(inject) .NET Core - InvalidOperationException

c# - 使用 EWS API 在其他邮箱中创建文件夹

c# - 多个 TimeSpan 的总和

c# - 将 IdentityServer4 配置为仅颁发 token

c# - .NET 下的原始 RSA 加密(又名 ECB/NoPadding)?

c# - 可以同时从多个线程调用单例对象的方法吗?

c# - MsTest 数据驱动 : ignore specific datarows via testattribute?

Delphi Prism Cirrus 访问和设置函数的结果

java - 用于 aspectj 代理的 websphere 应用程序服务器中的类路径

c# - 处理 ViewModel/Model 中的致命异常