有人告诉我,在依赖注入框架出现之前,开发人员会使用工厂来实现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