依赖注入,如何注入"other"对象?

Dependency injection, how to inject "other" object?

我总是听说它是硬编码的:

final class Dependency {}

class A
{
    private Dependency $dependency;

    public function __construct()
    {
        $this->dependency = new Dependency();
    }
}

好的,让我们使用依赖注入:

class A
{
    private Dependency $dependency;

    public function __construct(Dependency $dependency)
    {
        $this->dependency = $dependency;
    }
}

什么让它变得更好?我不能通过 Dependency!

以外的任何内容

最常见的设计是依赖是一个多态对象,即一个基础class或接口。在这种情况下,依赖注入使您能够提供任何子类型,包括测试替身。

但即使 Concrete Dependencies 也有一些优势。正如评论所暗示的那样,依赖项可能隐藏了自己的大对象图。此外,构造函数注入使多个 class 可以共享一个实例,您可以将其注入到所有需要它的对象中。