有人告訴我,在依賴注入框架出現之前,開發人員會使用工廠來實現DI。任何人都可以提供一個工廠模式如何用於DI的例子。我的意思是,僅僅考慮一個工廠是一個依賴注入器,但我無法在網絡上找到任何示例。我可以使用工廠來實現依賴注入嗎
回答
這離我的頭頂,未經測試的代碼(用C#)
public class CarFactory : ICarFactory{
private static CarFactory instance = null;
public static ICarFactory SingletonInstance {
get {
if (this.instance == null){
this.instance = new CarFactory();
return this.instance;
}
},
set {
this.instance = value;
}
}
public ICar CreateCar(string make){
switch(make)
{
case "Toyota": return new Toyota();
case "Honda" : return new Honda();
default: throw new Exception();
}
}
}
public interface ICarFactory {
ICar CreateCar(string make);
}
public class Toyota : ICar
{
}
public class Honda : ICar
{
}
和使用情況會是這樣的:
ICar car = CarFactory.SingletonInstance.CreateCar("Toyota");
揭露CarFactory的一個實例,公開可讓您爲你的單元測試嘲笑CarFactory,你可以在調用CreateCar時讓你的模擬CarFactory返回嘲弄的ICar。
現在通過實際的依賴項(例如實現服務的類)來替換工廠中的汽車。瞧,你有一個包含你所有依賴的工廠。您現在可以使用Factory來「解析」您的依賴關係。你可以採取的例子,並進一步通過使用泛型類型和字典(哈希表),其中的關鍵是類型名稱和價值實現的實例,如推:
public T Create<T>(){
return mydictionary.get(typeof(T).Name);
}
類似的東西...你得到漂移...
希望它有幫助!
那麼你會同意,依賴注入只不過是一個工廠實現? – j2emanue
這不只是給你一個服務定位器,而不是依賴注入?看到[這個問題]的答案(http://stackoverflow.com/questions/1557781/whats-the-difference-between-the-dependency-injection-and-service-locator-patte)。 –
有幾種使用依賴注入的方法:1#通過你的setters在你的類中「注入」依賴。 2#是通過你的classe的構造函數「注入」你的依賴關係。 3#是讓你的依賴通過一個全局對象來訪問,在這個例子中是CarFactory.SingletonInstance(因爲它是靜態的)。我喜歡全局對象方法,因爲它使您的構造函數的簽名專注於業務對象(重要的東西)。更多花哨的DI框架還允許特殊的方法屬性「注入」依賴關係。 – TchiYuan
- 1. 工廠模式或依賴注入未來實現
- 2. 依賴注入與工廠
- 3. 依賴注入和工廠
- 4. 依賴注入和工廠
- 5. 通用接口依賴注入工廠
- 6. Junit測試中的依賴注入工廠實現
- 7. 在Spring中使用依賴注入來替換工廠模式
- 8. 你可以在持久實體中使用依賴注入嗎?
- 9. 我可以在我的Titanium Mobile應用程序中使用AngularJs來實現依賴注入嗎?
- 10. 使用依賴注入來注入依賴注入器
- 11. Autofac依賴注入實現
- 12. 依賴注入的實現
- 13. 依賴注入實現
- 14. 我可以使用DefaultBinder執行依賴注入嗎?
- 15. 模型工廠內的依賴注入
- 16. 工廠模式在依賴注入
- 17. WCF依賴注入和抽象工廠
- 18. PHP工廠模式依賴注入
- 19. 依賴注入功能與工廠(AngularJS)
- 20. Grails依賴注入和工廠
- 21. 依賴注入容器 - 工廠模式
- 22. Zend2依賴注入工廠服務
- 23. 依賴注入和/或工廠模式
- 24. 可以有依賴注入回退嗎?
- 25. 不依賴於實現的工廠
- 26. 我可以使用jmock替換工廠返回的實現嗎?
- 27. 將容器注入工廠可以嗎?
- 28. 我可以使用Spring.NET在創建的實例中注入依賴關係嗎?
- 29. Vue可以通過依賴注入(DI)來導入組件嗎?
- 30. PHP依賴注入。我的代碼實際上是依賴注入容器嗎?
此答案可能會有所幫助。 「依賴注入VS工廠模式」:http://stackoverflow.com/a/12399680/4797330 – BranLakes