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

Mut*_*pan 0 .net c# 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

类似地,所有依赖关系都可以通过上面的2个构造函数来解决,单元测试框架可以使用它直接使用参数化构造函数.

在这种情况下,实现IunityContainer和服务定位器来创建实例的优点是什么.

Yac*_*sad 7

具有两个构造函数被认为是反模式.看看这篇文章.

在容器中使用容器作为服务定位器也被视为反模式.看看这篇文章这篇文章.

您应该有一个接受所有依赖项的构造函数,然后您应该在Composition Root中创建该对象.