ioc 和依赖注入之间的区别

2024-05-06

ioc 和依赖注入之间的区别。解释一下 spring 中的依赖注入。 JSF 依赖注入和 spring 依赖注入有什么区别?


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 指出:“使用服务定位器,应用程序类通过向定位器发送消息来明确请求它。通过注入,没有明确的请求,服务出现在应用程序类中——因此控制反转。”

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

你可以看看这个帖子:依赖倒置:服务定位器或依赖注入 http://jhonatantirado.wordpress.com/2012/04/24/dependency-inversion-service-locator-or-dependency-injection/

Also:

ASP.NET MVC:解析还是注入?这就是问题所在…… http://www.simple-talk.com/dotnet/.net-framework/asp.net-mvc-resolve-or-inject-that%E2%80%99s-the-issue%E2%80%A6/通过迪诺·埃斯波西托

控制容器反转和依赖注入模式 http://martinfowler.com/articles/injection.html马丁·福勒

控制反转 http://martinfowler.com/bliki/InversionOfControl.html马丁·福勒

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ioc 和依赖注入之间的区别 的相关文章

随机推荐