3

我聽到有人說你不應該使用服務定位器來進行依賴注入。那麼,如何在不依賴服務定位器的情況下注入依賴關係呢?我想嘗試IoC容器,但不想陷入反模式。如何使用依賴注入而不是服務定位器

如果你只是設置一切,所以有一個地方,所有的類總是有一個依賴鏈到最深的類? (如果我/有意義的話)

我沒有把所有的代碼放在IoC容器的依賴關係上,是嗎?

那麼你在哪裏「使用」你的容器(用於rexolving)呢?你如何解決所有問題,就像你的代碼一樣深入?是否通過使用直到前一層的接口來設計一切都是正確的方法?

或者我只是缺少一點?

讓我提醒你,我只是不想陷入反模式,需要一些提示/頭上。

+0

相關:http://stackoverflow.com/questions/3153546/how-does-autowiring-work-in-spring/3153617#3153617 – Bozho 2011-03-28 14:50:19

+0

相關:http://stackoverflow.com/questions/4570750/dependency-injection -turtles-all-the-down-down – 2011-03-28 17:48:24

+0

相關:http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2 – 2011-03-28 17:49:03

回答

6

如果你只是設置好一切如此 有一個地方的所有類 總是有依賴鏈的 最深的班? (如果我/這使得 意義了)

是的,這就是所謂的組成根應用程序的,它就是你會配置您的IoC容器和解決您的根類型。

這是不正確的把所有的代碼 與選擇國際奧委會 容器上的依賴遍野,是什麼呢?

正確的話,最好不要引用傳遞在你的類型的IoC容器,因爲這將讓他們少可重複使用,和耦合類型IoC容器的一般概念。

那麼你在哪裏「使用」你的 容器(用於rexolving)? 你是如何解決所有問題的,因爲你的代碼需要深入到 ?是否通過使用每個 層的接口設計一切正確的方式 的部分 直到前一層?

您將在您的組合根目錄以及代碼中需要通過容器(通常用於依賴鏈支持)實例化類型(即來自工廠類型)的任何位置使用容器。

許多IoC容器可以爲您生成這些工廠類型,因此您只需通過IMyFactory作爲依賴項,或者在某些IoC容器的情況下,爲Func<IMyService>。這意味着您不需要創建依賴於您的IoC容器的工廠類型。

在使用接口方面,依賴倒置原則指出你應該依賴抽象而不是依賴於結核,所以如果你想採用依賴注入,你將需要考慮這個概念。

+0

謝謝你的答案。你有一個很好的代碼示例(或鏈接到它)的工廠類型?也許何時何地使用這些? – Rodi 2011-03-29 11:50:53

+0

您是否使用特定的IoC容器? – devdigital 2011-03-29 12:37:06

+0

我打算解決Ninject 2. – Rodi 2011-03-29 14:37:59