依赖注入接口与具体 类?
Dependency Injection Interface Vs Concrete classes?
我对DI中的几点感到困惑。让我解释:
首先,依赖注入是否必须遵循依赖倒置原则?
如果是这样,我们就不能注入具体的 class 实例作为依赖。因为 ,这个操作违反了 DIP。
让我们通过一个例子来问我的问题:
public class Client {
private Service service; // Service is concrete class !
Client(Service service) {this.service = service;}
}
所以在这个例子中,dependent和dependency都是具体的。尽管这违反了 DIP 原则,但我们可以说这是依赖注入吗?在我看来,是的,我们 can.Because DI 都是对象创建,这些代码履行了真正的职责,并从依赖中获取创建对象的操作。但同时它又不遵循 DIP。我在等你的想法:)
在此先感谢朋友们。
Does Dependency Injection has to follow Dependency Inversion Principle?
不,不是。依赖注入只是从外部将依赖项注入组件的做法,而不是让组件创建或请求这些依赖项。
因此,尽管您可以在不遵循依赖倒置原则的情况下应用依赖注入,但遵循 DIP 通常是一个很好的做法,因为 DIP 提倡松散耦合,这使得替换、修饰、拦截和模拟依赖项变得更加容易,这提高了可测试性、灵活性和可维护性。
我对DI中的几点感到困惑。让我解释: 首先,依赖注入是否必须遵循依赖倒置原则? 如果是这样,我们就不能注入具体的 class 实例作为依赖。因为 ,这个操作违反了 DIP。 让我们通过一个例子来问我的问题:
public class Client {
private Service service; // Service is concrete class !
Client(Service service) {this.service = service;}
}
所以在这个例子中,dependent和dependency都是具体的。尽管这违反了 DIP 原则,但我们可以说这是依赖注入吗?在我看来,是的,我们 can.Because DI 都是对象创建,这些代码履行了真正的职责,并从依赖中获取创建对象的操作。但同时它又不遵循 DIP。我在等你的想法:) 在此先感谢朋友们。
Does Dependency Injection has to follow Dependency Inversion Principle?
不,不是。依赖注入只是从外部将依赖项注入组件的做法,而不是让组件创建或请求这些依赖项。
因此,尽管您可以在不遵循依赖倒置原则的情况下应用依赖注入,但遵循 DIP 通常是一个很好的做法,因为 DIP 提倡松散耦合,这使得替换、修饰、拦截和模拟依赖项变得更加容易,这提高了可测试性、灵活性和可维护性。