可能重複:
What is dependency injection?SmartUI開發者試圖擴大他的視野,你能解釋什麼是Dependancy Injection嗎?
我讀過的維基百科頁面。 我從Apress的一本書中讀到了一個清晰的解釋。
我還是不明白它是什麼,或者它爲什麼有用。
StackOverflow似乎是問這個問題的最佳地方。 :)專家能給我一個容易理解的解釋嗎?
可能重複:
What is dependency injection?SmartUI開發者試圖擴大他的視野,你能解釋什麼是Dependancy Injection嗎?
我讀過的維基百科頁面。 我從Apress的一本書中讀到了一個清晰的解釋。
我還是不明白它是什麼,或者它爲什麼有用。
StackOverflow似乎是問這個問題的最佳地方。 :)專家能給我一個容易理解的解釋嗎?
簡而言之,依賴注入意味着您不需要創建所需的對象,並且可以根據接口進行編程。由此,一個類更容易被測試,更獨立於其他代碼。
兩個例子:
第一個例子:
using Core.Service.X;
using Core.Service.Y;
public class A //without injection
{
private ServiceX servicex;
private ServiceY servicey;
public A()
{
servicex = new ServiceX();
servicey = new ServiceY();
}
}
在這個例子中,A級必須知道ServiceX和ServiceY及其履行情況(這是一個非常簡單的例子,ServiceX和ServiceY本身可能會有複雜的構造函數
第二個示例:
using Core.ServiceInterfaces;
public class B //without injection
{
private IServiceX servicex;
private IServiceY servicey;
public A (IServiceX serx, IServiceY, sery)
{
servicex = serx;
servicey = sery;
}
}
在這個例子中,類沒有意識到任何類的具體實現,它不會自己構造它們。通過這種方式,班級更加可以重複使用,因爲另一方(通常是城堡溫莎,統一或MEF等DI容器)會照顧這些建築。
你在第二個例子中有一個錯字。是不是一個DI? – SoftwareGeek 2010-08-07 16:20:34
把它想象成一個可配置的聲明對象工廠。工廠不會調用「new」來實例化對象,而是爲您提供它們。
依賴注入需要一定的設計風格(例如,使用接口),以保持代碼的分層和模塊化。測試會更容易,通過更改實現而不是修改代碼更容易進行修改。
完全重複。我很抱歉。 – 2010-08-07 13:38:06