gpt4 book ai didi

dependency-injection - ioc和依赖注入(inject)的区别

转载 作者:行者123 更新时间:2023-12-02 05:54:35 24 4
gpt4 key购买 nike

ioc 和依赖注入(inject)的区别。解释 Spring 的依赖注入(inject)。 b/w JSF 依赖注入(inject)和 spring 依赖注入(inject)有什么区别..

最佳答案

IoC 表示控制反转。

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

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

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

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

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

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

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

还有:

ASP.NET MVC: Resolve or Inject? That’s the Issue…通过迪诺埃斯波西托

Inversion of Control Containers and the Dependency Injection pattern通过马丁·福勒

InversionOfControl通过马丁·福勒

关于dependency-injection - ioc和依赖注入(inject)的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com