使用ServiceLocator的依赖注入如何优于在构造函数中创建依赖对象明确性

时间:2015-10-26 00:24:50

标签: c# .net design-patterns dependency-injection ioc-container

可以通过使用默认构造函数初始化依赖对象来解决依赖关系,如下所示。

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和服务定位器来创建实例的优势是什么。

1 个答案:

答案 0 :(得分:7)

有两个构造函数被认为是反模式。看看this article

将容器用作类中的服务定位器也被视为反模式。请查看this articlethis article

你应该有一个接受所有依赖关系的构造函数,然后你应该在Composition Root中创建对象。