【问题标题】:Difference between ioc and dependency injectionioc和依赖注入的区别
【发布时间】:2010-08-04 05:01:27
【问题描述】:

ioc 和依赖注入的区别。在 spring 中解释依赖注入。 b/w JSF依赖注入和spring依赖注入有什么区别..

【问题讨论】:

标签: dependency-injection terminology


【解决方案1】:

IoC 表示控制反转。

让我们看一些“强耦合代码”(“MyComponent”依赖于“Logger”):

public class MyComponent
{
  public MyComponent()
  {
  :
  }
  public void DoSomeWork()
  {
    var logger = new Logger();
  :
  }
}

我们可以将其更改为使用“接口”,但必须有人提供“实现”:

public class MyComponent
{
  public MyComponent()
  {
  :
  }
  public void DoSomeWork()
  {
    ILogger logger = ...; // who’s going to provide this?
  :
  }
}

依赖注入 (DI) 是 IoC 的一种特定实现。

//Dependency Injection pattern
public class MyComponent
{
  private ILogger _logger;
  public MyComponent(ILogger logger)
  {
    _logger = logger;
  }
  public void DoSomeWork()
  {
    // Use the logger component here
    _logger.Log();
   :
  }
}

另一个实现是服务定位器。

//Service Locator pattern
public class MyComponent
{
    public MyComponent()
    {
        :
    }
    public void DoSomeWork()
    {
        ILogger logger = ServiceLocator.GetService();
        :
    }
}

Martin Fowler 指出:“对于服务定位器,应用程序类通过向定位器发送消息来明确要求它。注入没有显式请求,服务出现在应用程序类中——因此控制反转。”

另外:“服务定位器和依赖注入之间的选择不如将服务配置与应用程序中的服务使用分开的原则重要。 “

你可以查看这个帖子:Dependency Inversion: Service Locator or Dependency Injection

还有:

ASP.NET MVC: Resolve or Inject? That’s the Issue… Dino Esposito

Inversion of Control Containers and the Dependency Injection pattern by Martin Fowler

InversionOfControl by Martin Fowler

【讨论】:

    【解决方案2】:

    依赖注入 (DI) 和控制反转 (IoC) 这两个术语通常可以互换使用来描述相同的设计模式(尽管并非所有人都同意这一点,有些人倾向于以稍微不同的方式应用它们)。该模式最初被称为 IoC,但 Martin Fowler 提议转向 DI,因为所有框架都以某种方式反转控制,他希望更具体地了解控制的哪个方面被反转。

    Dependency Injection 上的这篇文章提供了概述并参考了 Fowler 的文章。它也不太特定于 Spring 和 PicoContainer 等特定技术,并提供了指向该主题的其他一些有趣文章的链接。不过同意上面的海报,Fowler 的文章是关于该主题的经典读物,并且也提供了很好的概述。

    【讨论】:

      【解决方案3】:

      IoC 是一种设计模式,大多数 IoC 容器都使用依赖注入。有不同类型的依赖关系,但最好阅读其中一些对我有帮助的文章;

      CodeProject

      IoC Container

      Windsor Container

      Beginner guide

      【讨论】:

      • 谢谢,但我想要区别 b/w JSF 依赖注入和 spring 依赖注入..
      【解决方案4】:

      请参阅 Mark Seemann 的 Dependency Injection in .NET

      【讨论】:

        【解决方案5】:

        Martin Fowler 的最佳文章是 http://martinfowler.com/articles/injection.html。关于 JSF,这篇文章http://java.dzone.com/articles/jsf-anti-patterns-and-pitfalls,似乎表明不同之处在于 JSF 使用 Setter Injection 而不是 Constructor Injection(通常是首选)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-12
          • 2010-09-13
          • 1970-01-01
          • 2020-05-06
          • 2016-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多