最近我在查看社区领导者在其开源实现中提供的一些源代码。其中一个项目利用了IOC。以下是示例假设代码:
public class Class1
{
private ISomeInterface _someObject;
public Class1(ISomeInterface someObject)
{
_someObject = someObject;
}
// some more code and then
var someOtherObject = new SomeOtherObject();
}
我的问题不是关于IOC是什么以及如何在技术术语中使用它们,而是关于对象创建的准则是什么。所有的努力,然后这一行使用“新”运算符。我不太明白。 IOC应该创建哪个对象,哪个对象可以通过new运算符创建?
答案 0 :(得分:6)
作为一般的经验法则,如果有什么东西提供服务,可能想要替换它们进行测试或使用不同的实现(例如不同的身份验证服务),那么注入依赖项。如果它就像一个集合,或者一个简单的数据对象,它没有提供你想要改变的行为,那么可以在类中实例化它。
答案 1 :(得分:5)
通常您使用IoC
,因为:
在不控制依赖关系的情况下,可以避免使用IoC
,例如,StringBuilder
始终是StringBuilder
并且具有已定义的行为,并且你通常不需要嘲笑那个;虽然你可能想要模拟一个HttpRequestBase
,因为它是一个外部依赖于互联网连接,例如,这在单元测试期间是一个问题(执行时间较长,而且这是你无法控制的)。
数据库访问存储库等也会发生同样的情况。