可以通过使用默认构造函数初始化依赖对象来解决依赖关系,如下所示。
public class Foo:IFoo
{
public void disp()
{
//some code
}
}
public class MyClass
{
IFoo ifoo;
public MyClass():this(new Foo())
{
}
public MyClass(IFoo i)
{
this.ifoo = i;
}
void method1()
{
ifoo.disp();
}
}
类似地,所有依赖项都可以通过上面的2个构造函数来解决,单元测试框架可以使用它们直接使用参数化构造函数。
在这种情况下,实现IunityContainer和服务定位器来创建实例的优势是什么。
答案 0 :(得分:7)
有两个构造函数被认为是反模式。看看this article。
将容器用作类中的服务定位器也被视为反模式。请查看this article和this article。
你应该有一个接受所有依赖关系的构造函数,然后你应该在Composition Root中创建对象。