我试图理解IoC容器的价值,将依赖关系注入需求类型,而不是使用更经典的静态服务或单例方法。
问题:使用IoC容器有哪些明显优势?
据我所知:
优点:
缺点:
以下是两者的代码示例:
// Statics & singletons
public class MyClass
{
public void DoStuff()
{
Service.DoSomething(); // static method call
Singleton.Instance.DoSomething(); // singleton method call
}
}
// IoC
public class MyClass
{
IService service;
IAnotherService anotherService;
// Depencies are injected by an IoC container..
public MyClass(IService service, IAnotherService anotherService)
{
this.service = service;
this.anotherService = anotherService;
}
public void DoStuff()
{
service.DoSomething();
anotherService.DoSomething();
}
}
答案 0 :(得分:2)
原因#1。它通过解耦组件来增强模块化。通过引入通用接口,两个软件组件,通过通用接口提供和使用服务。您可以轻松地交换提供商,而不会打破您的消费者。
原因#2可测试性。想象一下,“服务”和“另一个服务”是一个完整的系统,如地图服务。为类创建单元测试时,您希望单元测试尽可能简单且独立。使用IoC,您可以在单元测试中替换自己简单的Service和AnotherService实现。