如何在.NET中最好地管理依赖树?

13
在我的上一个项目中,我们使用 MSBuild 作为脚本语言。(是的,真的!)我们还编写了数百个自定义的 MSBuild 任务,用于那些更适合在 C# 中实现的部分。(我甚至编写了一个 MSBuild 任务来生成 MSBuild 任务的样板代码。是的,它消耗了它自己。)
虽然我不建议其他人采取同样的方法,但我发现其中一个非常有用的功能是内置的依赖关系管理。正如您所期望的那样,很容易表达依赖关系并让 MSBuild 负责满足它们。例如,我们软件中几乎每一步都需要将某个特定集合的文件复制到特定位置。你可以轻松地编写:
Step1: CopyFiles
Step2: CopyFiles, Step1

执行Step2时,它只会复制文件一次。

在软件中构建和满足依赖关系树是相当普遍的。我希望MSBuild团队能够将其依赖关系管理代码从MSBuild中分离出来,并将其移入到.NET Framework中,以便任何人都可以使用它。如果无法实现,您认为以这种方式管理依赖关系的最佳选项是什么

2个回答

5
我认为你可以使用像Spring这样的IOC容器来获得这种行为。
将任何只需运行一次的任务实例化为单例,并使任务对象的构造函数运行该任务。然后,稍后出现具有对该任务依赖项的任何对象都将获得对已经运行的任务的引用,并能够获取该任务的结果或推断该任务已经成功运行。
在spring配置中,您最终会得到许多链接在一起的任务,每个任务都在其构造函数配置中引用其他任务。 这种方法是最灵活的,您不受“任务”或任何过于繁重的限制。
我猜任何工作流库也有类似的概念。但我并不真正熟悉这些。
我认为对于任何更小的事情,人们必须自己编写对象图和接口,使用访问者模式和可能使用字典来保持状态。

1

在 CodePlex 上看看 Refix 项目。它代表 REference FIX,而且它的工作非常出色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接