使用服务定位器的依赖注入如何优于在构造函数中显式创建依赖对象

How does Dependency Injection using ServiceLocator advantageous over creating dependent objects explicity in constructor

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

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和服务定位器来创建实例有什么好处。

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

将容器用作 类 中的服务定位器也被认为是一种反模式。看看this article and this article.

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

中创建对象