1

加載依賴程序集我與依賴注入(DI從現在起)努力解決組件和正找一個優雅的解決方案在.NET環境中加載依賴程序集。作爲解釋,假設我們有3個程序集,A,B和C,其中A取決於B,而B取決於C.現在我需要從程序集A載入組件,但是因爲我使用的是DI,所以我沒有有對程序集A的引用。即使對程序集A的引用也不夠,因爲我需要確保A,B和C都在我的輸出目錄中結束。依賴注入和.NET

所以,一些明顯的解決方案是:
- 從執行應用程序添加到A,B和C的引用:需要依賴結構,於我而言,是極其複雜的,使這有點不想要的解決方案的知識。
- 將這些dll添加到GAC:在我的情況下,不是一個選項。


所以我想知道如果有人有這個問題的優雅解決方案。不確定它是否相關,但我正在使用Castle Windsor作爲DI。

感謝
喬尼

+1

爲什麼你的依賴非常複雜?這看起來像代碼味道給我。 – 2010-06-24 17:12:39

+1

我不認爲他們異常複雜。複雜。與大多數企業應用程序一樣。我只是不希望依賴結構的知識成爲任何試圖將測試應用程序或類似程序放在一起的人的必需品。 – joniba 2010-06-26 10:42:00

回答

1

它會買你動態加載程序集?

你應該只引用添加A,B和C在執行應用程序,除非你正在編寫設計由其他單位進行擴展的應用程序,或者你必須改變依賴非常頻繁。

否則,你正在解決一個小問題(需要重新編譯部署的變化)通過引入不同的問題(在運行時發生故障的可能性)。

覺得作爲應用程序的構造函數的參數引用列表的 - 你的應用程序應該明確宣佈每天進食他們走在配置文件中的它的依賴來代替。

+0

基本上我同意你的意見。我只是在尋找人們用來解決這個問題的其他選擇。就我而言,尤其需要了解很多知識才能知道哪些依賴性需要添加到用人項目中,因爲依賴性結構非常複雜。我已更新該帖子以反映這一點。 – joniba 2010-06-24 16:40:20

5

有您的AppDomain稱爲AssemblyResolve,讓你有機會加載缺失的組件的事件。這使您可以從您提供的任何流中加載缺少的程序集,例如不同文件夾中的文件或存儲在數據庫中的文件。

+0

這可能是迄今爲止我見過的最佳選擇。謝謝。 – joniba 2010-06-26 10:43:27

+0

只是想說,我發現所有的答案有幫助。如果我能的話,我會把它們都標記爲答案。謝謝! – joniba 2010-12-27 17:04:22

1

如果您有唯一的問題是獲得組件的輸出目錄比這不是一個問題,溫莎 - 這是一個問題的MSBuild(或南特或任何你正在使用建項目)。請讓腳本去做。如果你正在尋找可擴展性場景,那就是你在目錄中有程序集,並且你想加載它們,Windsor 2.5(當前主幹)對此也有相當不錯的支持,無論是從XML還是從流利的API。

+0

只是想說,我發現所有的答案有幫助。如果我能的話,我會把它們都標記爲答案。謝謝! – joniba 2010-12-27 17:03:28