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/