【问题标题】:What's the best way to manage a dependency tree in .NET?在 .NET 中管理依赖关系树的最佳方法是什么?
【发布时间】:2009-02-11 17:06:30
【问题描述】:

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

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

Step1: CopyFiles
Step2: CopyFiles, Step1

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    我认为对于任何更小的东西,人们必须使用访问者模式滚动他们自己的对象图和界面,也许还有一个字典来保存状态。

    【讨论】:

      【解决方案2】:

      查看 CodePlex 上的 Refix 项目。它代表 REference FIX,效果很好。

      【讨论】:

        最近更新 更多