2

我正在尝试找出 Windows 工作流基础的内部结构。因此,我们有一些软件组件,我们以工作流的形式将它们交织在一起,无论是基于条件的顺序工作流还是状态机工作流。现在,我在想(我在这里可能错了)这并不同样适用于 IoC + 依赖注入(通过 Unity 或 Spring.net)。什么时候用什么??我想对了吗??

4

2 回答 2

4

不太确定我是否理解这个问题,但无论如何我都会尝试一下。

WF 不使用 IOC 容器。它使用 ServiceLocator 模式,您可以在其中将依赖项添加到工作流运行时、服务定位器和工作流活动,并从工作流运行时检索这些服务。

ServiceLocator 和 IOC 模式相似,并且在解耦依赖方面具有相同的目的。虽然在 IOC 容器中将依赖项推入,而 ServiceLocator 用于将依赖项拉出,但方法有所不同。

希望这能回答您的问题,如果没有,我会尝试重新表述原始问题。

于 2009-01-06T13:48:09.207 回答
3

我也在努力解决如何使用工作流中由我的 IOC 容器提供和服务的组件。正如另一个答案所述,工作流实例希望使用服务定位器从运行时中提取服务,而不是注入依赖项。

弥补差距的一种简单方法是在设置 WF 运行时时将依赖项从 IOC 容器中取出,然后使用 AddService 将它们放入运行时。您的工作流可以覆盖 OnActivityExecutionContextLoad,并使用服务提供者上的 GetService 方法将它们从运行时中取出,并将它们放入工作流的 [NonSerialized] 公共属性中。然后,您可以通过代码活动等访问服务。

您还可以构建一个运行时服务,在激活工作流实例时注入依赖项。

于 2009-04-24T22:17:19.223 回答