2009-06-04 36 views
18

我讀的是Injection by HandNinjection(以及Why use Ninject)。我遇到的困惑兩個部分組成:依賴注入框架:爲什麼我在意?

  1. 手工技術我已經熟悉了注射,但我不熟悉Ninjection,因此我不知道完整的程序將如何工作。也許這將有助於提供一個完整的程序,而不是像在該頁面上所做的那樣,顯示程序被分解成片段

  2. 我仍然沒有真正瞭解到這是如何使事情變得更簡單。我想我錯過了一些重要的東西。如果您創建了一組注入,然後在兩個大組之間進行切換(這對嘲笑等有用),我可以看到注入框架如何有用,但我認爲還有更多比起那個來說。但我不確定是什麼。或者,也許我只是需要更多的例子來說明爲什麼這是令人興奮的事情來推動重點。

+1

我仍然不明白爲什麼你不想手動注入 – Casebash 2009-09-20 00:26:29

回答

6

在沒有DI框架的情況下注入您的依賴關係時,您最終會在整個應用程序中使用箭頭代碼告訴類如何構建它們的依賴關係。

public Contact() 
     : this(new DataGateWay()) 
    { 
    } 

但是如果你使用像Ninject,所有的箭頭代碼是在一個地方使其更容易改變依賴於使用它的所有類。

internal class ProductionModule : StandardModule 
{ 
    public override void Load() 
    { 
     Bind<IDataGateway>().To<DataGateWay>(); 
    } 
} 
1

使用大多數框架的依賴注入可以在運行時配置,無需重新編譯。

+0

我不認爲這是真的:通常它可以在部署時調整;或者一般情況下不需要重新編譯。我的意思是,接線在運行期間完成,但仍然通常是靜態的。 – StaxMan 2009-06-04 18:39:55

2

我真的很喜歡某些框架的自動裝配方面......當你不必關心你的類型需要實例化的時候。

編輯: 我讀this article by Ayende @ Rahien。我真的支持他的觀點。

+0

你能詳細解釋一下嗎? – Brian 2009-06-04 18:17:15

0

依賴注入可以得到真正有趣的,如果你得到你的代碼的地方,代碼中只有很少的依賴關係。一些依賴注入框架將允許您在配置文件中定義您的依賴關係。如果您需要一個非常靈活的軟件而無需修改代碼就需要更改,這可能非常有用。例如,工作流軟件是這類解決方案的主要候選者。

3

它允許您通過模擬特定代碼塊所需的接口來輕鬆測試代碼。它還允許您輕鬆地交換功能而不破壞代碼的其他部分。

這是關於內聚和耦合。

你可能不會看到小項目的好處,但是一旦你經歷過小事情,當你必須對系統進行更改時,它變得非常明顯。使用DI是一件輕而易舉的事情。

+0

+1提到內聚和耦合 - 我認爲這是使用依賴注入的核心思想 - 開發高度內聚但鬆散耦合的組件。 – 2010-02-16 01:12:29

4

我還沒有真正得到如何使事情變得更容易。我想我錯過了一些重要的東西。

豈不是巨大的,如果我們只有制定分立元件,每個提供不同的功能,我們可以很容易地理解,再利用和維護。我們在哪裏只有工作的組件。

什麼阻止我們這樣做,我們是否需要一些基礎設施,可以以某種方式將這些組件合併並管理爲工作應用程序自動。這樣做的基礎設施可供我們使用,即IOC框架。

因此IOC框架不是管理依賴或測試或配置。相反,它是管理複雜性,使您只能工作和思考組件。