依赖注入的方式

时间:2014-04-28 06:19:07

标签: c# design-patterns dependency-injection

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

我的理解是通过这种实例化依赖关系的方式,高级类仍然需要了解有关Factory或Service定位器的信息。依赖注入意味着依赖项被推送而不是像工厂类型那样被拉动,最好的方法是使用Inversion of Control容器,如NInject,Unity,CastleWindsor等。请分享您的观点。

2 个答案:

答案 0 :(得分:4)

依赖注入和服务定位器是two opposing ways to program to interfaces,但依赖注入解决了大多数问题和挑战,远远优于Service Locator anti-pattern

摘要工厂可以注入需要它们的服务中,因此可以与两种方法结合使用。它们与讨论not a variation of Service Locator完全相同。

答案 1 :(得分:1)

不,他们不能。

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

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

<强>更新

我还要引用Martin Fowler:

  

基本选择是服务定位器和依赖关系   注射。第一点是两种实现都提供了   在天真的例子中缺少基本的脱钩 - 两者兼而有之   案例应用程序代码独立于具体实现   服务接口。两者之间的重要区别   模式是关于如何提供实现的   应用程序类。使用服务定位器,应用程序类要求   它明确地通过消息发送给定位器。注射没有   显式请求,服务出现在应用程序类中 - 因此   控制倒置。

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