PHP: DI Container


PHP: DI Container

我一直在阅读依赖注入和DI容器。但是,我无法理解这个概念。

DI 容器如何知道"控制器"依赖于"加载器",并在"控制器"之前加载"加载器"?

我看到它的方式是它需要某种配置文件来跟踪依赖项,如果是这样,编写起来不是更容易吗:

// Controller
function __construct() {
    $this->load = new 'Framework'Core'Loader;
}

是的,DIC 需要预先配置,无论是在某些配置文件中,还是通过堆叠在一起的工厂闭包或通过

注释源代码。

是的,在 ctor 中创建实例更容易,但这会消除 DI 的所有好处,因为您不再注入依赖项。

另请注意,您不需要 DIC 即可执行 DI。DI 只是通过构造函数、setter 或 using 方法在代码中注入依赖项的行为。

只是为了完成戈登所说的:

是的,DIC 需要预先配置,无论是在某些配置文件中还是 通过将工厂关闭堆叠在一起或通过注释您的 源代码。

这里最简单/最快的方法是注释,请查看此示例:

class Loader {
    //...
}
class MyController {
    /**
     * @Inject
     * @var Loader
     */
    private $loader;
    public indexAction() {
        // You can use $this->loader
    }
}

在此示例中,依赖项(加载器)已通过注释注入:代码清晰,可读,并且不需要编写任何配置文件。这是IMO最简单的解决方案。

如果你对这种方法感兴趣,我从PHP-DI中举了一个例子,PHP-DI是一个使用注释的依赖注入框架(我正在研究)。