2011-04-06 110 views
2

我是DI和IoC模式的新手。我正在研究一個新項目,並希望最大限度地減少我的對象。我的課程在解決方案中分爲幾個項目。所以我下載了NInject,並在應用程序啓動(Main函數或Global.asax)中讀取應創建綁定的地方。我不明白的一件事是,在那種情況下,我將不得不引用那些包含類的程序集來創建綁定,這意味着這些類與我創建綁定的對象結合在一起。是對的嗎?這是否意味着使用MEF是一個更好的主意?任何人都可以解釋IoC的工作原理以及爲什麼使用它是個好主意? 謝謝關於DI和IoC容器的問題

回答

2

控制反轉不是沒有引用程序集,而是關於在邏輯和相關服務之間創建契約。它通過在使用服務時抽象出具體的實例化來促進可測試性和可重用性。

例如,這允許您傳入不同的數據服務,將數據保存到內存表中而不是數據庫,這意味着您不會在單元測試期間將數據保存到數據庫。執行工作的函數並不關心傳入的內容,因爲無論它是什麼,它都實現了一個通用接口,您可以在合理的假設下執行它們的功能。

有很多很好的資源可用於瞭解有關IOC/DI模式的更多信息。這裏有一對夫婦:

Ninject Sample

Wiki Article

And some site called "stack overflow"

0

在最簡單的方法,你的綁定(容器配置)需要知道的所有引用的類,它是在大多數情況下足夠了。

如果它不是你的情況,一些IoC容器可以有多個綁定/配置。在StructureMap中,綁定名爲Registry,您可以指定包含多個註冊表,甚至可以掃描指定目錄中的庫以動態包含所有註冊表。我記得NInject也提供了從多個地方配置內核的可能性。

在這裏我相信使用MEF並不會更好。您也必須共享項目之間的通用界面。而MEF是爲了運行時的可組合性,當你不能在設計時組成系統的時候,如果我理解正確,這裏就不是這種情況。