2014-04-28 165 views
2

可以将工厂模式(工厂方法,简单工厂方法和抽象工厂)或服务定位器模式获取依赖关系称为依赖注入。依赖注入的方式

我的理解是通过这种实例化依赖关系的方式,高级别的类仍然需要了解Factory或Service定位器。依赖注入意味着依赖关系被推动,而不是像工厂类型和最佳方式一样被拉动正在使用像NInject,Unity,CastleWindsor等控件容器的反转,请分享您的意见。

回答

1

不,他们不能。

依赖注入是实现IoC或控制反转的模式。它意味着,这些类不应该彼此紧密耦合,并且不应该知道在哪里获取他们的依赖。

控制原理的倒置通常表达为“不要打电话给我们,我们会打电话给你” - 在这种情况下,由IoC容器管理的类应该不知道任何关于它们的依赖关系以及如何获取它们。工厂模式和服务定位器意味着,实际使用类知道获取该依赖关系的方式。

UPDATE

我还想引用马丁:

最根本的选择是服务定位器和依赖注入 之间。第一点是这两种实现都提供了 基本解耦,这在原始示例中是缺少的 - 在 的情况下,应用程序代码独立于服务接口的具体实现 。两个 模式之间的重要区别在于如何将该实现提供给 应用程序类。使用服务定位器,应用程序类会通过消息向定位器明确请求 。有了注入没有 明确的要求,该服务出现在应用程序类 - 因此 控制反转。

http://martinfowler.com/articles/injection.html