C# 国际奥委会vs服务/单身人士
我试图理解IoC容器的价值,将依赖注入到所需的类型中,而不是使用静态服务或单例的更经典方法 问题:使用IoC容器的明显优势是什么 据我所知: 优势:C# 国际奥委会vs服务/单身人士,c#,.net,dependency-injection,inversion-of-control,C#,.net,Dependency Injection,Inversion Of Control,我试图理解IoC容器的价值,将依赖注入到所需的类型中,而不是使用静态服务或单例的更经典方法 问题:使用IoC容器的明显优势是什么 据我所知: 优势: 单点配置 改进的应用程序可测试性(如Moq框架) 更容易处理更改(不取决于具体类型,而是接口允许更容易的更改控制-例如,交换日志记录服务不需要更改应用程序范围的代码) 缺点: 学习曲线 更多接口 下面是这两种方法的代码示例: // Statics & singletons public class MyClass { pub
- 单点配置
- 改进的应用程序可测试性(如Moq框架)
- 更容易处理更改(不取决于具体类型,而是接口允许更容易的更改控制-例如,交换日志记录服务不需要更改应用程序范围的代码)
- 学习曲线
- 更多接口
// 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();
}
}
理由#1。它通过解耦组件来增强模块化。通过引入公共接口,两个软件组件可以通过公共接口提供和使用服务。您可以轻松地交换提供程序,而不会破坏您的消费者
原因#2可测试性。设想“服务”和“另一个服务”是像映射服务一样成熟的系统。当您为类创建单元测试时,您希望单元测试尽可能简单和独立。有了IoC,您可以在单元测试中替换自己的服务和其他服务的简化实现。Reason#1。它通过解耦组件来增强模块化。通过引入公共接口,两个软件组件可以通过公共接口提供和使用服务。您可以轻松地交换提供程序,而不会破坏您的消费者
原因#2可测试性。设想“服务”和“另一个服务”是像映射服务一样成熟的系统。当您为类创建单元测试时,您希望单元测试尽可能简单和独立。有了IoC,您可以在单元测试中替换自己的服务和其他服务的简化实现