有人可以向我解释使用IOC容器而不是简单地将默认实现硬编码到默认构造函数中的优势吗?
换句话说,这段代码有什么问题?
public class MyClass { private IMyInterface _myInterface; public MyClass() { _myInterface = new DefaultMyInterface(); } public MyClass(IMyInterface myInterface) { _myInterface = myInterface; } }
据我所知,这个类足够支持构造函数注入,因此可以轻松完成单元测试和模拟.除此之外,默认构造函数移除了IOC容器的计算开销(更不用说整个过程更加透明).
我可以看到使用IOC容器的唯一好处是,如果您需要经常切换接口的实现.我错过了什么吗?
IoC的想法是将组件的部分功能委托给系统的另一部分.在IoC世界中,您拥有彼此不了解的组件.您的示例违反了这一点,因为您在MyClass和IMyInterface的某些实现之间创建紧密耦合.主要思想是您的组件不知道如何使用它.在您的示例中,您的组件对其使用做出了一些假设.
实际上这种方法可行,但混合IoC和显式对象初始化并不是一个好的做法IMO.
IoC通过以代码清晰度的代价执行后期绑定来为您提供松散耦合.当您向此进程添加其他行为时,它会使事情变得更加复杂,并且当某些组件可能会接收具有不需要或不可预测的行为的对象时,可能会导致错误.