在.NET中管理依赖关系树的最佳方法是什么?

时间:2009-02-11 17:06:30

标签: .net msbuild dependency-injection dependency-management refix

在我的上一个项目中,我们使用MSBuild作为脚本语言。 (是的,真的!)我们还编写了数百个自定义MSBuild任务,用于在C#中更有意义的部分。 (我甚至编写了一个MSBuild任务来为MSBuild任务生成样板代码。是的,它自己消耗了。)

虽然我不建议其他人采用相同的方法,但我发现非常有用的一件事是内置的依赖关系管理。正如您所期望的那样,表达依赖关系很容易,让MSBuild能够满足它们。例如,我们软件中的几乎每一步都要求将某组文件复制到某个位置。你可以轻松地写:

Step1: CopyFiles
Step2: CopyFiles, Step1

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

构建和满足依赖树在软件中非常常见。我希望MSBuild团队能够获取他们的依赖管理代码,将其与MSBuild分离,并将其移至.NET Framework,任何人都可以使用它。 Baring that,您认为以这种方式管理依赖关系的最佳选择

2 个答案:

答案 0 :(得分:5)

我认为你可以使用像Spring这样的IOC容器来实现这种行为。

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

在spring配置中,您最终会将许多任务链接在一起,每个任务都会在其构造函数配置中引用其他任务。 这种方法最灵活,您不仅限于“任务”或任何过于沉重的任务。

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

我认为对于任何小的东西,人们必须使用访问者模式滚动他们自己的对象图和界面,并且可能是一个字典来保持状态。

答案 1 :(得分:1)

查看CodePlex上的Refix项目。它代表REFER FIX,它的效果非常好。