13

在我上一個項目中,我們使用MSBuild作爲腳本語言。 (是的,真的!)我們還編寫了數百個自定義MSBuild任務,用於C#中更有意義的部分。 (我甚至寫了一個MSBuild任務來生成MSBuild任務的樣板代碼,是的,它自己消耗了)在.NET中管理依賴關係樹的最佳方式是什麼?

儘管我不建議其他人採用這種方法,但我發現其中一個非常有用的東西是內置的依賴管理。正如你所期望的那樣,很容易表達依賴關係,並讓MSBuild負責滿足它們。例如,我們軟件中幾乎每一步都需要將某組文件複製到某個特定位置。你可以很容易地寫:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

,當你執行Step2,也只是將文件複製一次。

構建和滿足依賴樹是軟件中很常見的。我希望MSBuild團隊將他們的依賴管理代碼,從MSBuild中解耦出來,並將其轉移到任何人都可以使用的.NET Framework中。那麼,你認爲用這種方式管理依賴關係的最佳選擇是什麼

回答

5

我想你可以使用像Spring這樣的IOC容器來獲得這種行爲。

實例化任何只能運行一次的任務作爲單例,並讓任務對象的構造函數運行任務。然後,隨後依賴該任務的任何對象將獲得對已經運行的任務的引用,並且能夠獲取該任務的結果或能夠推斷出該任務已成功運行。

在spring配置中,最終會連接許多鏈接在一起的任務,每個任務都在其構造器配置中引用其他任務。 這種方法是最靈活的,並且不限於「任務」或任何過於沉重的事情。

我猜任何工作流程庫也有類似的概念。但我並不十分熟悉這些。

我認爲對於更小的事物,人們必須使用訪問者模式和可能的字典來保持狀態,才能使用自己的對象圖和界面。

1

查看CodePlex上的Refix項目。它代表參考FIX,它工作得非常好。

相關問題