Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在.NET中管理依赖关系树的最佳方法是什么?_.net_Msbuild_Dependency Injection_Dependency Management_Refix - Fatal编程技术网

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

什么';在.NET中管理依赖关系树的最佳方法是什么?,.net,msbuild,dependency-injection,dependency-management,refix,.net,Msbuild,Dependency Injection,Dependency Management,Refix,在我的上一个项目中,我们使用MSBuild作为脚本语言。(是的,真的!)我们还为C#中更有意义的部分编写了数百个自定义MSBuild任务。(我甚至编写了一个MSBuild任务来为一个MSBuild任务生成样板代码。是的,它会消耗自己。) 虽然我不建议其他人采用同样的方法,但我发现其中一个非常有用的方法是内置的依赖关系管理。正如您所期望的,很容易表达依赖关系,并让MSBuild负责满足它们。例如,我们的软件中几乎每一步都需要将一组特定的文件复制到特定的位置。你可以很容易地写: Step1: Cop

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

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

Step1: CopyFiles
Step2: CopyFiles, Step1
当您执行
步骤2
时,它只会复制文件一次


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

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

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

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

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

我认为,对于任何较小的项目,人们必须使用访问者模式和字典来滚动自己的对象图和界面来保存状态。

看看CodePlex上的项目。它代表引用修复,并且工作得非常好