Dependency injection 是否可以进行不需要';不会导致控制反转吗?

Dependency injection 是否可以进行不需要';不会导致控制反转吗?,dependency-injection,inversion-of-control,Dependency Injection,Inversion Of Control,首先,我是软件界的新手。因此,如果这是一个简单或糟糕的问题,我深表歉意 我一直在读关于DI和IOC的书,我知道DI是实现IOC的一种方式(还有其他方式)。所以我一直在想,DI总是导致控制反转吗?这是否取决于您如何调用从DI中获益的方法或类?换句话说,应用程序的流程将决定DI是否会产生IOC,对吗?我认为(DIPP&p)的这段引语大致概括了这一点: 依赖注入还是控制反转? 术语“控制反转”最初指的是任何类型的编程风格,其中。根据这个定义,在.NET框架上开发的大多数软件都使用IoC。例如,当您编写

首先,我是软件界的新手。因此,如果这是一个简单或糟糕的问题,我深表歉意

我一直在读关于DI和IOC的书,我知道DI是实现IOC的一种方式(还有其他方式)。所以我一直在想,DI总是导致控制反转吗?这是否取决于您如何调用从DI中获益的方法或类?换句话说,应用程序的流程将决定DI是否会产生IOC,对吗?

我认为(DIPP&p)的这段引语大致概括了这一点:

依赖注入还是控制反转?

术语“控制反转”最初指的是任何类型的编程风格,其中。根据这个定义,在.NET框架上开发的大多数软件都使用IoC。例如,当您编写ASP.NET Core MVC应用程序时,您使用动作方法创建控制器类,但调用动作方法的将是ASP.NET Core。这意味着你不在控制之中——框架在控制之中

这些天,我们习惯于使用框架,我们不认为这是特殊的,但是它是完全不同于你的代码的一个不同的模型。对于.NET应用程序,尤其是命令行可执行文件,仍然可能发生这种情况。一旦调用Main,代码就处于完全控制状态。它控制程序流程、生命周期——一切。未引发任何特殊事件,也未调用任何重写的成员

在DI有名字之前,人们开始将管理依赖关系的库称为控制容器的反转,很快,IoC的含义逐渐向那个特定的含义漂移:对依赖关系的控制反转。马丁·福勒(Martin Fowler)一直是分类学家,他引入了依赖项注入这一术语,专门指依赖项管理上下文中的IoC。依赖注入被广泛认为是最正确的术语。简言之,国际奥委会是一个更广泛的术语,包括但不限于直接投资

[来源:第29页第1.4.1节。]

此引用是在.NET上下文中编写的,但如果您过滤掉.NET和ASP.NET,则它适用范围很广。在Martin Fowler最初的定义中,IoC是关于框架的,而DI本身可以在没有任何框架的情况下应用,例如使用“简单”(无UI)控制台应用程序。这意味着,根据福勒最初的定义,可以在不应用IoC的情况下实施DI

然而,多年来,“国际奥委会”一词已经“漂移”,我们现在普遍认为直接投资是国际奥委会的一种特殊形式。可以说是“子类型”或“实现”,其中IoC是概念或“抽象”。这意味着没有IoC就不能应用DI,因为实践DI意味着实践IoC。但是,您可以练习IoC,而不必练习DI,因为还有其他IoC实现,例如服务定位器