我想创建一组可以在共享资源(如文件)上运行的自定义活动。这些自定义活动将在许多工作流中使用,每个工作流都将共享此共享资源。我的目标是尽可能简化创建这些工作流程,因为每个工作流程只是一些基本活动的重新安排。
我设法使用InArgument并将此资源传递给每个活动,但由于这很乏味,我想知道如何简化它以便不需要参数。
此外,是否可以在一个地方初始化此资源,以便所有工作流都可以认为它已经存在?
答案 0 :(得分:-1)
如果您愿意,可以浏览Workflow Extensions的使用。基本上你利用“服务定位器”模式。
定义一个知道如何访问/修改您拥有的文件的类。假设这个名为ResourceLocator的类实现了一个IResourceLocator接口。然后,当您创建工作流主机时,请执行此操作
class ServiceLocator:IServiceLocator
{
public FileStream GetFile(string path){
}
}
//在这里发起WF主机 host.Extensions.Add(()=> {new ResourceLocator();});
然后,您可以在自定义活动中执行
context.GetExtension<IResourceLocator>().GetFile(pathToFile);
基本上,此扩展程序成为您在工作流之间共享公共代码的方法。您可以将其拆分为不同的程序集,并在不同的工作流程项目之间共享。