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

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

虽然我不建议任何人采取同样的方法,但我发现非常有帮助的一件事是内置的依赖关系管理.正如你所料,很容易表达依赖关系,让MSBuild照顾满足他们.例如,我们软件中的几乎每一步都需要将某些文件集复制到某个位置.你可以很容易地写:

Step1: copyFiles
Step2: copyFiles,Step1

当您执行Step2时,它只会复制一次文件.

构建和满足依赖关系树在软件中很常见.我希望MSBuild团队采用其依赖管理代码,将其与MSBuild分离,并将其移动到任何可以使用它的.NET Framework中.不好意思,你觉得这是怎样管理依赖关系的最佳选择?

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

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

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

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

我认为任何更小的东西,人们必须使用访问者模式滚动自己的对象图和界面,也可以使用Dictionary来保存状态.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...