在Inversion of Control中,回调和依赖注入有什么区别?

时间:2014-04-28 16:59:01

标签: dependency-injection callback inversion-of-control

我明白发生了什么,知道我错过了什么。我在DI中使用和接口或抽象类来定义我的函数/方法可以接收的内容。只要我的对象实现或扩展了给定的类型,我就可以将它传递给好的解耦。

在回调中,我将函数传递给调用其他函数的方法。在C中,我可以使用函数指针。 OOP语言与接口/抽象类相同。

我看到了解耦,为什么这很好,软件可以扩展,等等,但不是两者之间的区别。

我错过了什么?

编辑:DI是模式还是回调实现?

1 个答案:

答案 0 :(得分:1)

依赖注入是一种软件设计模式,正如您所说,可以让您解耦代码。例如,将您的SQL后端与Oracle后端交换或在开发环境中交换电子邮件主机或实时更新。

这自然不鼓励将数据库代码添加到您的前端项目中,这显然不是一个好主意。

回调或委托是将一些代码作为参数传递给方法的地方。您可以在诸如集合之类的内容中看到很多内容,您可能希望在不同的使用者代码中使用不同的排序功能。

因此,如果你在哪里编写自己的DI容器,你将绑定对接口的引用,比如说IRepository就是一个具体的实现,比如SQLRepository或WebRepository。您的DI代码允许消费者使用配置文件(例如统一)或代码(Ninject)来定义在编译时使用哪个具体实现。