2012-03-22 24 views
3

我在我的應用程序中大量使用依賴注入。因此,我的組件引用接口,具體的實現只有通過XML文件配置的IoC容器是已知的。將程序集部署到bin文件夾而不添加對項目的引用

這個設計的結果是我最終需要在我的bin文件夾中的程序集(例如Newtonsoft.Json,SqlLite),我不需要在我的項目中引用它。事實上,我明確指出不希望引用,因爲我或我的團隊可能會意外地提到具體的實現而不是接口,從而破壞我們正在使用的DI的優勢。

在VS 2010 SP1中引入的_bin_DeployableAssemblies文件夾對於這種情況非常有用,但僅適用於web projects(我個人使用MVC3並確定,但它並不能解決一般問題。或多或少deprecated in VS11 BetaCopying the files into the bin directory prior to build感覺icky - bin文件夾不再是構建工件的容器,我想可以使用一個自定義的post-build事件,但似乎應該有更多的「開箱即用」來解決。這個問題我是堅持了後建什麼其他的方法是有決心解決這個問題

+0

您正在尋找不受依賴關係傷害的世界。如果你想引用抽象類型那麼做。你可以使用像nDepend這樣的靜態分析工具來強制執行。 – Oded 2012-03-22 16:08:32

+0

@Oded,你說的是什麼樣的傷害世界。這怎麼會導致問題? – 2012-09-20 20:55:43

+0

@LandonPoch - 主要部署問題,但是當沒有對具體類的引用時配置IoC容器的後勤方案也會出現(特別是如果您需要強類型配置)。我已經看到上述方法在部署時爆炸,因爲IoC容器找不到配置的具體依賴關係(未被引用的_anywhere_因此未部署)。 – Oded 2012-09-21 08:12:26

回答

5

有一對夫婦的方式來處理這個問題:??

  1. 將文件複製到bin文件夾中的構建後事件將處理此問題。
  2. 在項目中包含文件作爲內容項,但不作爲參考。他們可以設置爲複製到構建的輸出文件夾。

我有時使用第二個選項。這確實具有使開發人員顯而易見的「依賴性」的優點,同時仍然防止他們實際使用在程序集內定義的類型,因爲它們不是引用,並且編譯器不會將它們視爲可用。

+1

第二個選項不是基於相對於源文件的路徑複製到bin文件夾中嗎?換句話說,爲了讓它們直接在bin中,我不必將這些東西推入根應用程序目錄而不是〜/ lib文件夾中? – 2012-03-22 16:50:32

+1

@EmilLerch是的,非常多 - 但是,我只是配置我的DI去尋找他們。/ lib文件夾,因爲它會複製到bin \ Debug \ Lib中,如果您將它們放在項目的Lib文件夾中... – 2012-03-22 16:52:55

+1

工作得很好。我添加了元素(http://msdn.microsoft.com/en-us/library/823z9h8w.aspx),並且該框架在正確的文件夾中查找 – 2012-03-22 20:55:36

相關問題