我查阅了这些概念,我想看看我是否正确理解了它们。主要是,我试图区分这三个概念。从这里的谷歌搜索和其他结果中,我看到了人们提供的很多关于它们的细节,但其中许多对我来说并不完全清楚,相互矛盾或互换概念(IoC/DI)。我正在尝试以一种更简单的方式来定义它们,这对我来说更容易消化,我想看看它是否足够准确。
控制反转
客户端类不直接实例化其依赖字段的实现类,因为它依赖于其他一些外部类/源来提供它们。在大多数情况下,这些字段是一个父类或接口,它具有一个或多个子类,这些子类将作为实现提供。
依赖注入
客户端类接收其依赖字段的实现类,无论是通过构造函数、设置器还是其他方式,并且此实现是一个全新的对象实例。提供类可能使用另一种模式,例如工厂,以确定将什么实现传递给客户端(或者它甚至可能直接实例化一个新实例并将其传递给客户端的构造函数)。
服务定位器
客户端类是调用服务定位器以提供其依赖字段的类。返回的实现是一个对象实例,可以与依赖相同依赖项的任何其他客户端类共享。
我尝试一个非常简单的例子:
迪:
public interface IX {
}
public class X : IX {
}
public class A {
IX depField;
public A(IX depField) {
this.depField = depField;
}
}
public void main() {
A myClass = new A(new X());
}
SL:
public interface IX {
}
public class X : IX {
}
public class A {
IX depField = serviceLocatorObj.GetService<IX>();
//where IX is mapped to X in the service locator class
}
public void main() {
A myClass = new A();
}
IoC 是接收方的概念,而 DI 和 SL 是处理供应方概念的两种可能方式。
谢谢。如果我错误地使用了任何术语,我也深表歉意。
编辑:感谢您的回复!