2012-06-03 233 views
2

我正在通過將模式劃分爲核心方面並逐一學習這些方面來教導自己MVVM模式。MVVM依賴注入

我的問題與依賴注入有關。這是什麼,爲什麼/我該在什麼時候使用它?我看過Jason Dolinger的MVVM簡介視頻,我看到他使用Unity。這可能會奇怪的問,但我將如何實現依賴注入沒有使用Unity?我基本上想了解依賴注入的概念以及如何使用它,而不必實現其他框架/工具(現在)。

謝謝。

回答

2

我認爲不用框架就能理解DI是很好的,但這個概念並不是很困難。

假設您想使用某種形式的交通工具。

interface ITransportation 
{ 
    Transport(); 
} 

的初步實施的方法,它使用的運輸形式可能是這樣的:

public void Move() 
{ 
    ITransportation car = new Car(); 
    car.Transport(); 
} 

與該方法的問題是,它現在是依賴於汽車類。我們應該通過我們的運輸對象來增加靈活性。這是控制反轉,與DI密切相關。

public void Move(ITransportation tr) 
{ 
    tr.Transport(); 
} 

正如你所看到的,我們不需要知道任何關於特定的DI框架。您可能還想查看ninject DI by hand教程。

+0

感謝您的回答安迪。那麼,我是否會正確地聲明在視圖和視圖模型中的依賴注入被用於將視圖從其基本視圖模型中「分離出來」? – user823486

+0

多一點情況可能會有所幫助。我們在談論WPF/Silverlight還是其他的東西? –

+0

嗨。我在WPF的背景下研究DI。 – user823486

0

只是爲了延長@安迪的回答

依賴注入的形式的Dependency Inversion Principle

爲了實現依賴的去耦一個(在分層架構通常發現的), DI是常用的實例場景,如基本的new()和Pattern方法等模式。除了能夠每次注入一個新的依賴實例(例如像工廠)之外,還可以設置容器來注入命名實例,單例實例等 - 即IoC容器通常還負責管理對象的壽命以及。

一個潛在的'心態轉移'是現在的依賴可能在具體類上公開可見,因爲DI通常通過構造函數或公共獲取/設置屬性注入。如果習慣於使用OO封裝,這看起來很奇怪,其中類的依賴關係被視爲實現,並且應該從「外部」即類方法簽名中隱藏。但是,通過實現接口/具體類分離(正如你應該的那樣,不僅爲了解耦,而且爲了測試/模仿的目的),注入構造函數/屬性注入方法將不在接口上,所以封裝再次到位。

回覆:「做手工DI」不團結等

什麼,你需要做的是編寫自己的IoC容器,然後是負責「建立」類的實例 - 每個中'build up',你可以掃描類的依賴關係(在容器中配置,例如通過配置,屬性或者僅僅通過約定),例如所有公共可設置屬性,或者構造函數上的任何類參數將被假定爲是依賴關係)。然後創建(如果需要)並將此「依賴」實例注入到對象上(例如,通過使用反射)。然後遞歸地,需要建立這些依賴關係的所有依賴關係等等。然後,您還需要爲每個對象提供生命週期管理,例如,單身人士等