在软件开发中,工作流的动态更新是一个常见的需求。通常,更新工作流涉及到代码的更改和重新测试,无论是部署整个包还是单个DLL。但是,如果将工作流放在配置文件中,并使用Unity框架来实现它,就可以在不需要任何代码更改的情况下灵活地更改工作流。
在开始编码之前,需要从Nuget包管理器获取Unity框架包。要获取包,请转到“工具”->“NuGet包管理器”->“管理解决方案的NuGet包”。
本文将使用一个简单的控制台应用程序项目类型来演示。有四个任务/步骤实现了一个单一的接口ITask。已经在配置文件中使用Unity注册了所有这些对象。
注意:已经以这样的方式编写了对象并注册了它,以至于可以使用相同的创建新工作流或更新。所以,在某个时候,如果想创建一个新的工作流,只需要在Unity配置中创建一个新的注册,对应相应的步骤,就准备好了。
现在是时候看看这段代码是如何工作的了。
C#
IUnityContainer container =
new
UnityContainer();
container.LoadConfiguration();
Console.WriteLine(
"
执行基本工作流..."
);
IWorkFlowManager workFlowManager = container.Resolve(
"
基本工作流
");
workFlowManager.Execute();
Console.WriteLine(
"
执行高级工作流..."
);
workFlowManager = container.Resolve(
"
高级工作流
");
workFlowManager.Execute();
在这里,当解析IWorkFlowManager工作流时,它被注册为“基本工作流”,返回的对象按顺序执行任务,然后执行它。在这个例子中,有四个任务在工作流“基本工作流”中,当执行它时,所有四个任务都被执行了。
如果将来计划更改工作流步骤/任务,并且不再需要使用TaskB,只需要更新配置文件并从“基本工作流”注册标签中移除它,工作流就更新了。就是这么简单。