2011-09-15 75 views
1

對不起,這是一個很長的問題。我正在尋找熱衷於DI容器的人士的幫助,以便閱讀。謝謝你的時間!您選擇的DI Container的功能有哪些是別人沒有的功能?

這個問題的目標是拿出一個功能列表,可以比較DI容器。 (我不認爲這是主觀的,是嗎?)我不問容器哪個更好。我要求告訴我,某些DI實現了哪些功能,而不是其他功能。這是一個非常具體的問題。

有很多關於SO的話題,討論什麼是DI Container for .NET是最好的選擇。這些問題大部分來自2009年後期,而且DI容器領域似乎自那時以來一直在變化。

現在不要誤解我的意思。我堅信,那麼多哪個DI容器可以選擇,只要你給它一些想法並選擇一個。順便說一下,這不僅關乎DI容器,還關乎許多其他交叉問題。

然而,在一個組織內部,最好是解決特定的技術問題,這樣開發人員就可以獲得這項技術的專業知識,並且可以在整個項目中應用它。這並不意味着上述技術應該適用於所有項目。它只是意味着,如果沒有令人信服的原因項目選擇一個DI容器而不是另一個,則不需要花時間討論必須使用哪個容器,因爲「首選」建議被設置在前面。

我想弄清楚什麼可以作出好的建議,如上所述。再次說明:不可能選擇「一勞永逸」技術,但應該可以選擇「默認」技術。

這將我帶到DI容器的比較標準。網中有不同DI容器的numerousbenchmarkcomparisons。不過有些人的事情,那個performance should not be choosing criteria爲一個DI容器。但有anecdotal evidences,表現可能很重要。

This guy爲不同的DI容器組合了一套比較標準,這是一個非常好的起點,但是有很多DI容器功能不在列表中。讓人想起支持AOP風格攔截和通過代表註冊對象實例的能力等功能。支持容器層次結構是列表中未提及的另一個功能,還有更多功能。對ASP.NET MVC的支持通常很容易添加,但如果它是開箱即用的,或者是開箱即用的擴展,那麼它很好。

截至寫作時刻,不止是一堆不同的DI容器。在我心目中,我粗略地將其歸類如下:

恐龍:

'恐龍' 並不意味着 '壞'。這意味着它們有很長的歷史,因此非常成熟,可能具有現代特徵,但核心是在.NET 3之前開發的。5來到了它影響他們的建築。他們都可以通過NuGet獲得。

李林甫:

  • LinFu - 李林甫被擱置在我的腦海。不像我列表中提到的許多其他項目,這一個沒有看到許多最近的版本。 This article使得它聽起來像作者放棄了這個項目,但我確信這不是事實。
  • Hiro - 同一篇文章介紹了這個實驗性容器,它預先編譯了對象實例化/注入代碼,以便解析時間與根本不使用DI的時間相當。聽起來很有趣,但我沒有聽說過任何有關生產使用的報告,(可能是我的錯),這是唯一一個在我使用NuGet時不適合我的盒子。

現代:

這些容器是基於.NET 3.5不要以任何方式給人「老年人」的印象。 Unity有一個過度設計的缺點。我不同意this article的作者,在Unity中使用裝飾器最簡單的方法是鈍的,事實上許多其他容器都是這樣實現的。但我強烈同意,無論何時需要定製Unity做一些不是開箱即用的事情,這都是一大痛苦。

LightCore看起來不錯,快速和穩定,但不是幾乎足夠的文檔,它不是obvious如何實現上述裝飾器。 Anyone

所有這些都可以通過NuGet。

簡約:

  • Funq - 數量有限的功能,但易於安裝和快速。
  • Munq - 像Funq,但與有線-在ASP.NET MVC和WCF
  • Petite支持 - 真的很小一個 - 可裝入一個cs文件。靈活的基於lambda的註冊,但沒有多少其他。
  • MicroIoC - 爲Windows Phone 7

通過的NuGet有些是提供簡約的容器。

那些我從來沒有聽說過任何使用的:

他們在斯科特Hanselman的page提到的上市不同的DI容器可用。我從來沒有遇到過任何其他的情況。

這些不能通過NuGet獲得。

另一個標準是商業支持的可用性。我知道Castle.Windsor的support可用,但我認爲這是關於它的。 Ninject在contribute page上提到了付費支持,但沒有給出電子郵件或鏈接,並且由於這種支持很可能不是由已建立的公司支持,因此可能並不可靠。

我現在的想法是,Castle.Windsor因爲成熟和商業支持的可用性而具有吸引力。由於Microsoft備份(儘管不受支持),因此Unity具有吸引力。 Autofac和Ninject在現代,易於使用,擴展和理解部門方面具有吸引力,Ninject在易於入門的類別中獲勝。

現在,讓我們接近真正的問題。爲了能夠選擇一個DI容器而不是另一個,需要有比較標準。明顯的是功能支持。由於DI功能沒有「官方」列表,所以我希望您回答標題中的問題:如果您更喜歡特定的DI,那麼對於您而言很重要的DI的哪些功能是不會被發現的易於實現/使用)在其他DI中?

這個問題的目標是想出一個功能列表,可以比較DI容器。 (我不認爲這是主觀的,是嗎?)

謝謝你提前的所有輸入!

回答

3

你看了SO質疑"How do the major C# DI/IoC frameworks compare?"

它由Mark Seemann一個偉大的答案誰字面上寫了Dependency Injection in .Net

書中他進入今天各地最流行的DI框架的優點和缺點。

+0

謝謝。閱讀這個問題和這本書。我的問題具體是關於可能由特定DI實施或不實施的DI功能列表。 –

+0

好的,只是你說的大部分問題都是從2009年開始的,我所指的問題是相當新的:) – brodie

+0

哦。是的,對不起,你是對的,我錯了,我確實錯過了這個特定的問題,它有幫助。 +1 –