1

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

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

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

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

2 回答 2

2

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

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

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

于 2012-06-29T21:31:25.387 回答
0

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

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

这里最简单/最快的方法是注释,看看这个例子:

class Loader {
    //...
}

class MyController {
    /**
     * @Inject
     * @var Loader
     */
    private $loader;

    public indexAction() {
        // You can use $this->loader
    }

}

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

如果您对这种方法感兴趣,我以PHP-DI为例,这是一个使用注释的依赖注入框架(我在此工作)。

于 2012-10-07T08:53:44.613 回答