是“IoC容器”和“DI容器”这两个词的同义词,还是单独的概念? [重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我目前正在涉及IoC容器主题的文章和问题,例如:

现在有些事情并没有让我感到明显。

据我所知,依赖注入(DI)最纯粹的形式如下,由我自己制定:

作为依赖于某些抽象服务的对象,我不必寻找这些具体的服务;当我自己的一个实例被创建时,或者很快就会提供给我的具体实例。

这将DI直接与服务定位器形成对比,因为我重新制定:

作为依赖于某些抽象服务的对象,我知道有人可以打电话给我,他可以为我提供这些具体的服务;当我需要它时,我会问他们一个具体的例子。

我目前对DI容器的理解是这样的:

作为DI容器,我知道我需要创建的具体服务类,以及每个类,每个类需要哪些抽象服务;因此,我将创建这些服务的实例并提供它们的依赖项。

由于理解上的冲突,我现在没有发现IoC容器的明显内容。根据我正在阅读的文章,它看起来像:

  • IoC容器是DI容器的同义词,因为这两个术语可互换使用 这是我在阅读M.F.时所理解的。和M.S.用品
  • DI容器与IoC容器不同,后者处理instanciation并提供服务定位器(即val x = IoC.resolve<IMyDependency>());由于DI容器不需要具体服务就知道DI容器存在,因此它们不能是相同的概念。 在阅读StackOverflow的问题和答案时,这将是我的理解

你能清楚这种困惑吗?

dependency-injection inversion-of-control ioc-container service-locator
1个回答
1
投票

你问题中的“容器”和“概念”这两个词让你感到困惑。容器不是一个概念。这只是一个工具。但是Inversion Of Control和Dependency Injection是概念和原则,即使没有任何容器也可以使用它们。

Inversion of control是一种设计原则,其中计算机程序的定制编写部分从通用框架接收控制流。实际上,任何框架都是控制反转的一个例子。因此,ASP MVC是控制反转的一个例子。

Dependency Injection是更广泛的控制反转技术的一种形式。这只是Inversion Of Control的一个特例。 Andpendency Injection不是Dependency Injection容器。您可以在应用程序中使用依赖注入,而无需任何依赖注入容器。

但是为了减少手动工作量,我们通常使用容器,我们通常将其称为DI容器或IoC容器。所以DI容器和IoC容器是同义词,但DI容器在这里是一个更精确的术语。

但是Inversion Of Control和Dependency Injection不是同义词。依赖注入是控制反转的特例。

© www.soinside.com 2019 - 2024. All rights reserved.