样本IoC,不是DI

时间:2014-10-15 09:17:54

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

依赖注入是控制反转的某种形式。

  1. 有人可以指定一些其他形式的反转 控制,这不是依赖注入?
  2. 是否有任何java框架是IoC容器,但不是DI     容器?
  3. 春天的哪一部分是IoC,而不是DI?

1 个答案:

答案 0 :(得分:3)

控制反转是允许框架运行自定义代码的能力。正如Martin Fowler所说here

  

控制倒置是您遇到的一种常见现象   扩展框架。事实上,它经常被视为一种定义   框架的特征。

所以这是控制反转的一个例子:

public class HomePage : Page
{
    protected override void OnPageLoad(object sender, EventArgs e) {
        // here your custom code
    }
}

在这里,我们有一些按照某种惯例制作的自定义课程'框架(在这种情况下是ASP.NET Web Forms)选择并运行我们的自定义代码。它在这里完成的方式是通过继承和覆盖框架提供的基类的虚方法。

所以这是控制反转的另一个例子:

public class HomeController : Controller
{
    public ActionResult Save(HomeSaveModel model) {
        // here your custom code
    }
}

这里我们有自己的自定义控制器,框架将通过某种约定来调用我们的代码。这里我们仍然使用框架给出的基类,但现在框架将使用反射调用我们的Save动作。

控制的反转就是挂钩到框架代码。请注意,在上面的示例中,没有任何依赖注入(也没有服务位置)。

  

是否有任何java框架是IoC容器,但不是DI容器?

名称" IoC容器"是误导性的,因为这些工具旨在帮助您连接应用程序中的依赖关系图,而不是帮助您将代码连接到框架。 IoC是框架的属性;如果它不做IoC,它不是一个框架:它是一个库。因此" IoC容器"是库,而不是框架,它们通常与我们使用的框架没有关系(例如ASP.NET等Web框架)。

所以从这个意义上说,没有像#oC; IoC容器这样的东西,因为这是他们无法做到的事情;根据定义。在这种情况下,你的问题停止了有意义:-),但仍然回答:不," IoC容器"总是" DI容器"但从来没有" IoC容器"。