13

在我上一个项目中,我们使用MSBuild作为脚本语言。 (是的,真的!)我们还编写了数百个自定义MSBuild任务,用于C#中更有意义的部分。 (我甚至写了一个MSBuild任务来生成MSBuild任务的样板代码,是的,它自己消耗了)在.NET中管理依赖关系树的最佳方式是什么?

尽管我不建议其他人采用这种方法,但我发现其中一个非常有用的东西是内置的依赖管理。正如你所期望的那样,很容易表达依赖关系,并让MSBuild负责满足它们。例如,我们软件中几乎每一步都需要将某组文件复制到某个特定位置。你可以很容易地写:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

,当你执行Step2,也只是将文件复制一次。

构建和满足依赖树是软件中很常见的。我希望MSBuild团队将他们的依赖管理代码,从MSBuild中解耦出来,并将其转移到任何人都可以使用的.NET Framework中。那么,你认为用这种方式管理依赖关系的最佳选择是什么

回答

5

我想你可以使用像Spring这样的IOC容器来获得这种行为。

实例化任何只能运行一次的任务作为单例,并让任务对象的构造函数运行任务。然后,随后依赖该任务的任何对象将获得对已经运行的任务的引用,并且能够获取该任务的结果或能够推断出该任务已成功运行。

在spring配置中,最终会连接许多链接在一起的任务,每个任务都在其构造器配置中引用其他任务。 这种方法是最灵活的,并且不限于“任务”或任何过于沉重的事情。

我猜任何工作流程库也有类似的概念。但我并不十分熟悉这些。

我认为对于更小的事物,人们必须使用访问者模式和可能的字典来保持状态,才能使用自己的对象图和界面。

1

查看CodePlex上的Refix项目。它代表参考FIX,它工作得非常好。

相关问题