2

我想弄清楚Windows工作流基础的内部。所以,我们有一些软件组件,我们将它们以工作流的形式交织在一起,无论是基于条件的顺序工作流还是状态机工作流。现在,我在想(这里我可能是错的),这不适用于IoC +依赖注入(通过Unity或Spring.net)。什么时候用什么?我甚至想对吗?Windows Workflow Foundation或IoC容器+依赖注入?

+0

我的问题有问题吗?它已经2小时没有任何反应,它不像StackOverflow – Perpetualcoder 2009-01-05 19:33:54

回答

4

不太确定我明白这个问题,但我会试一试。

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

ServiceLocator和IOC模式相似,在解耦依赖关系中具有相同的用途。虽然在IOC容器中推送依赖关系,但是使用ServiceLocator来提取依赖关系,但应用程序是不同的。

希望这回答你的问题,如果不是,我会尝试重新解释原来的问题。

3

我一直在琢磨如何使用我的IOC容器从工作流中提供和维护的组件。正如其他答案所述,工作流实例希望使用service-locator从运行时提取服务,而不是注入依赖关系。

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

您也许可以搭建一个运行时服务,在启动工作流实例时注入依赖关系。