2009-12-21 74 views
2

因此我開始了這個新項目,並且試圖融入我所讀到的所有新設計原則,即嘗試製作東西松散耦合,可測試,並遵循一些模式。因爲我碰到了牆壁,所以請先解釋'幕後'

因此,我遇到了不得不將許多工廠/經理傳入我的類構造函數的問題,這導致我進入Dependancy注入。

public class SomeClass 
{ 
    public SomeClass(IDBFactory factory, IOrderManager orderManager, ....) 
} 

因此,如果我使用ninject,據我所知,然後我會綁定一個特定的實現類。

那麼背後發生了什麼?

當我實例化SomeClass時,NInject會綁定我在配置文件中定義的實現嗎?

我做的:

ISomeClass sc = NInject.Get<ISomeClass>(); 

和ninject會做:

new SomeClassImpl(pass in all the implementaitons in the constructor) 

是否正確?

+0

請參閱http://stackoverflow.com/questions/1082898/how-exactly-dependency-injection-is-implemented-internally-in-spring-net – 2009-12-21 13:24:53

回答

4

我不知道NInject,但大多數DI容器支持自動裝配,它的工作原理是這樣的:

  1. 當你請求ISomeClass,它看起來通過其所有已註冊類型的列表。使用這個列表,它發現ISomClass的期望實現是SomeClass。
  2. 它將使用SomeClass的構造函數創建一個實例(可能使用Activator.CreateInstance),因此它使用Reflection來確定需要哪些參數。
  3. 對於每個參數,它會查看類型併爲每個參數重複步驟1-2。

因此,該過程可能是遞歸的,但最終,您應該最終得到滿足所有依賴關係的完全填充的對象圖。