IoC和依赖注入的实用性

Tom*_*ito 1 dependency-injection inversion-of-control

某些情况下,单元测试不适用于项目.

我正在研究控制反转和依赖注入实用程序,我想知道是否有充分的理由使用它比使单元测试更容易.

--update

好吧,让我们分析一下引用的优点:减少耦合.从子类型中取出耦合,并将耦合添加到需要创建要注入的对象的处理程序类型.

没有单元测试,这种耦合传输的优势是什么(不是耦合消除).

Sun*_*nny 5

IOC/DI为您的应用程序带来了一些非常重要的功能

  • 可插入性:与DI,你可以依赖注入到代码中没有明确地知道怎样的功能正在工作.例如:您的类可能会注入一个ILog接口,以便它可以写入日志.由于该类使用ILog接口,因此可以实现FileLog,MemoryLog或DatabaseLog并将其注入到您的类中.只要实现ILog接口,任何这些实现​​都可以正常工作
  • 可测试性:使用类中的DI,您可以注入模拟对象来测试类的行为,而无需实际需要具体实现.例如:考虑一个需要存储库来执行数据操作的Controller类.在这种情况下,存储库可以是控制器的DI.如果需要在Controller类上编写测试,则可以传递DI'd模拟版本的存储库,而无需使用实际的存储库类
  • 可配置性:一些常见的DI框架,如Castle Windor,Unity,Spring等,允许进行DI以及创建对象的生命周期管理.这是一个非常强大的功能,允许您通过配置管理依赖关系及其生命周期.例如,考虑您的应用程序需要ICache依赖项.通过生命周期和对象管理的配置,您将能够将缓存配置为每个应用程序或每个会话或每个请求等,而无需在代码中明确烘焙实现.

HTH